Dieses Dokument umfasst die Forschungsnotizen, der auf der Methode der Grounded Theory basierenden Dissertation "API-Usability der auf Templatemetaprogrammierung basierenden Softwarebibliothek SeqAn" von Björn Kahlert.
Mehr über SeqAn erfahren » Mehr über das Datenanalyswerkzeug APIUA erfahren »
Anwender guckt in Iterators-Doku nach und kopiert nun von dort den Code
Anwender hat Geduld verloren und Code Snippet eingefügt. Allerdings hat er vergessen, TAminoAcidString zu definieren.
zusammen mit apiua://diff/0meio6dzt3eo1wj7/15/sandbox%2Fmy_sandbox%2Fapps%2Fmy_app%2Fmy_app.cpp null-Operation ansonsten kleiner schritt vorwärts
Anwender guckt in Iterators-Doku nach und kopiert nun von dort den Code
Anwender hat Geduld verloren und Code Snippet eingefügt. Allerdings hat er vergessen, TAminoAcidString zu definieren.
zusammen mit apiua://diff/0meio6dzt3eo1wj7/15/sandbox%2Fmy_sandbox%2Fapps%2Fmy_app%2Fmy_app.cpp null-Operation ansonsten kleiner schritt vorwärts
Sequentielle statt evolutionäre Darstellung von Lösungen (Tutorials)
@20 , @21
TAminoAcidString" zu String<AminoAcid>Peptide".
TAminoAcidString.seqan::String<char> str = "admn"; seqan::Iterator<seqan::String<char> >::Type it = begin(str); seqan::Iterator<seqan::String<char> >::Type itEnd = end(str);
String<char> durch String<AminoAcid>Peptide wurde im Tutorial TAminoAcidString eingeführt.Peptide verwendet, wäre alles glatt gelaufen.Anwender hat Geduld verloren und Code Snippet eingefügt. Allerdings hat er vergessen, TAminoAcidString zu definieren.
Anwender guckt in Iterators-Doku nach und kopiert nun von dort den Code
zusammen mit apiua://diff/0meio6dzt3eo1wj7/15/sandbox%2Fmy_sandbox%2Fapps%2Fmy_app%2Fmy_app.cpp null-Operation ansonsten kleiner schritt vorwärts
Ausgabe für von allen Permutationen der Zeichen von 'a' - 'z' der festen Länge 3.
Aufrufe unnötig kompliziert; keine Rekursion wie Aufgabenstellung verlangt.
Ausgabe wird bei jedem Funktionsaufruf kopiert; d.h. keine Referenz verwendet.
aaa,aab,aac,aad,aae,aaf,aag,aah,aai,aaj,aak,aal,aam,aan,aao,aap,aaq,aar,aas,aat,aau,aav,aaw,aax,aay,aaz,aba,abb,abc,abd,abe,abf,...
countOneMers-Funktionvoid printPermutations(int len), die ein Alphabet mit len verschiedenen Symbolen ausgeben sollvoid permutations2(int len, String<char> & str)Erfolgreich alle 'a' durch 'X's ersetzt.
abcdefghijklmnopqrstuvxyz Xbcdefghijklmnopqrstuvxyz Hello SeqAn! Hello SeqAn! Hello Seqan! Hello SeqXn!
void permutations2(int len, String<char> str) nach void replaceAs(String<char> str)
Gescheitert an der Aufgabe, Character Counting so umzuschreiben, dass statt String<char> eine Template-Variable verwendet wird.
Ursache siehe Schritte 1.2.
String<char> durch template<typename T>letterNum[thisLetter]++; funktioniert, nicht, weil thisLetter vom Typ DNA sein kann und dafür der Bracket-Operator nicht überladen wurdeordValue(thisLetter)Erfolgreiches Zählen der Anzahl Vorkomnisse von Buchstaben in String.
word: hello world letter : 1 letter d: 1 letter e: 1 letter h: 1 letter l: 3 letter o: 2 letter r: 1 letter w: 1 word: banana letter a: 3 letter b: 1 letter n: 2 word: mississippi letter i: 4 letter m: 1 letter p: 2 letter s: 4
char ein einem String ausgibt.
resize auf letterNum (speichert Ergebnis)countOneMersChar statt charmain-Funktion ans Ende der Datei verschobenmain = 0countOneMers-Arguments (String<char> str) wird#include <seqan/file.h>
benötigt. Von Benutzer korrekt hinzugefügt.
Sonst Fehlermeldung:
Undefined symbols for architecture x86_64: "void seqan::write<std::ostream, seqan::String<char, seqan::Alloc<void> > >(std::ostream&, seqan::String<char, seqan::Alloc<void> > const&)", referenced from: std::ostream& seqan::operator<< <std::ostream, char, seqan::Alloc<void> >(std::ostream&, seqan::String<char, seqan::Alloc<void> > const&) in tutorial_first_examples.cpp.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation) make[2]: *** [sandbox/bkahlert/apps/tutorial_first_examples/tutorial_first_examples] Error 1 make[1]: *** [sandbox/bkahlert/apps/tutorial_first_examples/CMakeFiles/tutorial_first_examples.dir/all] Error 2 make: *** [all] ErrorUnklar, wie Anwender darauf kam (keine Spur in doclogs); aber knapp 6min Zeit gehabt, um jemanden zu fragen.
Iteration #20 Korrekte Initialisierung des Zählarrays mit 0.
Alignments A1 - Global Alignment
Nicht erfolgreiches Alignment von acgtacgtact und actactacgt .
::std::cout << align; von (1) trac.mi.fu-berlin.de/seqan/wiki/Tutorial/Alignments ⇅2581
typedef Row<TAlign>::Type;Erfolgreich alle 'a' durch 'X's ersetzt.
abcdefghijklmnopqrstuvxyz Xbcdefghijklmnopqrstuvxyz Hello SeqAn! Hello SeqAn! Hello Seqan! Hello SeqXn!
void permutations2(int len, String<char> str) nach void replaceAs(String<char> str)
test_my_test_strings_example1 ist eine Prä-Prozessor-Variable und kann nicht durch einen Wert wie "Hello world" belegt werden - falsches Verständnis vom Test-Framework ODER - mangelnde C++-Kenntnisse (User nennt selbst, er hätte nur Beginner-Skills im Fragebogen)
Anwender hat Test-Code (genauer: den aufrufenden Teil; Rest in Header-Datei noch da) entfernt. um "Hello World!" auszuführen. Knapp 11min sind bis zu diesem Zeitpunkt vergangen. Möglicherweise hat der Anwender nach Hinweise gesucht - wie es grundsätzlich weitergeht (steht doch im Tutorial...) - wie Tests auszuführen sind. Schlussendlich hat der Anwender die Hello World-Zeilen aus dem GettingStarted (vermutlich fälschlicherweise) in die test.cpp statt in die my_app.cpp kopiert.
Eine nicht näher erklärte Schwierigkeit.
Wird verwendet, wenn eine Relation kodiert werden soll, ohne mehr über die Schwierigkeit zu wissen.
In den Cognitive Dimension Questionnaires tritt dieser Fall auf.
Befragter spricht von “Funktionalität"
Die Bedeutung war mir erst unklar.
Der Befragte 60ba - progressiveEvaluation hat mr Klarheit verschafft. Dieser spricht davon, wie man eine Funktion genau anwendet. Das ist hier sehr wahrscheinlich auch gemeint gewesen.
Transkription:
Wenn es zu wenig Beispiele gibt oder ich nicht den Gebrauch einer Funktion verstehe, komme ich ins schleudern.
Die Eignung von SeqAn-Vokubal (Lösungswelt) und dem realen Vokabular (Problemwelt) wird als gut beschrieben.
Trotzdem sei hier auf Probleme der Benennung / Benamung / Namensgebung verwiesen.
Installation umständlich
Von Letondal ebenfalls durch Erfragungen von Bioinformatikern herausbekommen
End-User Programmer (End-User Software Engineering - EUSE) (siehe citep{Ko:2011el}) tendieren dazu, die Annahme zu treffen, die Eigenentwicklung sei nur für den eigenen Gebrauch.
Tatsächlich wird sie häufig häufiger als angenommen gebraucht und an Arbeitskollegen weitergegeben. Es entsteht eine Art Standardsoftware im Unternehmen.
Damit steigen die technischen Schulden - aufgrund des Problems der Pfadabhängigkeit (“Fehler verseucht den folgenden Ast des Abhängigkeitsbaums”) - im Vergleich zur ursprünglichen Annahme.
vgl. Quellen aus http://en.wikipedia.org/wiki/Path_dependence zitieren.
Siehe auch Faktor-10-Problem (Prechelt fragen)
Alle Phänomene stark intepretiert!
Warnung: Viel interpretiert
Six Learning Barriers in End-User Programming Systems bibtex://AndrewJKo:2...
“I don’t know what I want the computer to do...”
Die Funktionsbreite ist laut 7c79 - personal unklar.
Daher stellt an sich die Frage, welche Funktionalität nun durch C++ und welche durch SeqAn erbracht wird.
“I think I know what I want the computer to do, but I don’t know what to use...”
Funktionen sind nicht kategorisiert.
Die Zugehörigkeit mancher Funktionen im Quelltext wie length oder value kann nicht problemlos erkannt werden, wenn es diese überhaupt gibt.
citep{Stylos:2008jt} sprechen von “method ownership”
Kritisch: semantisch liegt method ownership vor, aber nicht mehr technisch
length hat tatsächlich keine Zugehörigkeit. Sie akzeptiert jedes Element und gibt im Zweifel 1 zurück.
Kategorie kann aufgabenbezogen (Quelle suchen!) oder subjektbezogen sein.
Beispiel: Aufgabenbezogen = Sequenzanalyse, Subjektbezogen: Sequenz
In OOP typischen Kategorisierungsinstrument: Klasse
Anfänger beschreiben, dass Sie anfänglich nicht wissen, welche Funktionen ans Ziel führen / helfen?
Mögliche Ursachen: Vocabulary Problem , Online-Dokumentation (Verbessert, Confusing) , (auch: Starter Object )
Ist immer mit viel Zeitaufwand verbunden!!!
Stand:
Fehlende Funktionskategorisierung ist Ursache für Probleme bei der Identifikation relevanter Funktionen
Behebung vom Identifikationsproblem:
Neben einer Funktionskategorisierung kann das auch eine sehr gute Suchfunktion sein.
Diese Information liegt vor, sie wird in der technischen Implementierung aber nicht abgebildet, sondern nur in der Doku.
in the documentation there is this kind of informa... (z.B. String.length)
“I think I know what things to use, but I don’t know how to make them work together...”
Wenn man weiß, welche Funktion hilft aber nicht, wie diese anzuwenden ist, stellt das ein Problem dar.
Mögliche Ursachen:
Weitere Formen / Teil-Bestandteile:
Konsequenz: Mangelnde Persistenz
Die Funktionsweise - also was tut die Funktion - einer Funktion ist nicht selbsterklärend bzw. es bestehen Unsicherheiten.
Das Verhalten / der Zweck einer Funktion kann nicht erkannt werden.
Warum? Weil die Funktionen nicht kategorisiert sind und somit nicht das primary/starter object erkennbar ist.
Beispiel:
TInfix label(frag, stringSet, seqID);
http://docs.seqan.de/seqan/develop/?p=Fragment#Fragment%23label
TAlphabet label(it);
http://docs.seqan.de/seqan/develop/?p=OutEdgeIterator#OutEdgeIterator%23label
Fehler werden vornehmlich von Anfängern / Workshop-Besuchern gemeldet
Unterschied zwischen Dna5 und Dna5String unklar.
Entweder fehlt die Erklärung des Benennungsschemas und letzteres existiert gar nicht.
Weitere Beispiele könnten auch sein String<String> und StringSet.
Wäre es da würde es folgendes tun:
Shortcuts erklärt und erkennbar gemacht, also dessen Role Expressiveness (Unzuverlässig) erhöht
Der API-Entwurf ist nicht vollständig technisch umgesetzt / erzwungen.
So gibt es in SeqAn logisch immer noch Memberfunktionen. Technisch sind diese allerdings global definiert.
Tatsächlich gibt es ein Reihe von LETs, die kein technisches Pendant besitzen und nur in der Dokumentation existieren und - wenn überhaupt - nur an Benennungsregeln erkannt werden können.
Dokumentation von ~ ist besonder wichtig für Top-Down-Lernen (erste Hypothesen benötigen besonders abstrakte Informationen) cite{Brooks:1983fj}.
Gilt (besonders) für Domänenexperten, da diese Top-Down vorziehen citep{Shaft:1998tc}
Geordnet nach fref{fig:APIDesignDecisions}
cite{Stylos:2007ip} Stylos, J., & Myers, B. (2007). Mapping the Space of API Design Decisions. Visual Languages and Human-Centric Computing, 2007. VL/HCC 2007. IEEE Symposium on, 50–60. doi:10.1109/VLHCC.2007.44 bibtex://Rosson:2007...
Entscheidungsgrundlage (nur bei explizit bewertbar, bei implizit nicht: argumentativ würde ja wieder explizit bedeuteun) es gibt den Wert implizt-intuitiv nicht, weil man nicht sagen kann, ob die augenscheinliche Intuiotion nicht doch auf qualitifizierte Argumentation oder empirischen Erkenntnissen basiert
siehe auch Metafunktionen
Template Programming ist ein “selten” gebrauchter bzw. unwissentlich gebrauchter Sprachbestandteil.
Er führt LETs ein, die den meisten Anwendern unbekannt sind. Unbekannte Konstrukte / LET
Syntax schwierig. Führt zu schlechterem Verständnis citep{BenShneiderman:gn,Shneiderman:1977jj} von SeqAn
cite{Letondal:2006dy} beobachtete, dass Bioinformatik (Endanwender) nur Änderungen an Code machten, Code aber nie überschrieben (zu anspruchsvoll). Genau das müsste man aber bei TP tun. Zeigt sich auch in den Daten. TP-Mechanismus praktisch nie verwendet.
Vom Bjarne Stroustrup, dem Vater von C++: C++ directly supports a variety of programming styles. In this, C++ deliberately differs from languages designed to support a single way of writing programs. http://www.stroustrup.com/oopsla.pdf
- auch TP möglich, aber unerwartet (eine (OOP) der drei Hauptlügen)
- Häufiges Bedürfnis, existierendesn Tool anzupassen (spricht auch für SeqAn) citep{Letondal:2006dy}
WICHTIG für SeqAn: Döring hatte beabsichtigt, dass SeqAn erweitert wird (mittels Template Mechanismus). Das ist in den Daten aber nicht zu sehen. Da wird nur Glue Code geschrieben. Letondal bestätigt das. Bioinformatiker bei ihr haben auch nur Änderungen an Code vorgenommen, der sie selbst kontrollieren. Selbst das Überschreiben von Methoden kam denen nicht in den Sinn.
C++ zu schwierig für Bioinformatiker citep{Tisdall:2001td}
Konzeptionelle Fehlentscheidung, denn Anwender sind auch Endanwender-Programmierer und die können kein Template Programming. TP mit der Motivation der ultimativen Erweiterbarkeit. Für SeqAn-Entwickler super (die standen wohl im Fokus). Für SeqAn-Endanwender ein Alptraum.
citep{GogolDoring:2009vz} Diss
-- Core-Design auf einer Handvoll von Techniken
-- jede Technik "limited complexity"
-- "our approach may be not as common for most programmers" wie OOP
-- Fehlermeldungen immer noch "ziemlich" verständlich
-- Vereinfachung durch template subclassing
John war Besucher des Workshop’14.
Für sein Paper implementierte er eine Python-Schicht, deren Quellcode online ist.
Dazu musste er sämtliche verwendete Templates vollständig instanziieren.
Genannter Grund bei persönlicher Befragung:
- Template-Programmierung zu kompliziert
- zieht Python vor
Sinn & Zweck von Metafunktionen unklar, obwohl an mehreren Stellen der Versuch, diese zu erklären (first steps tutorial, http://trac.seqan.de/wiki/Tutorial/Metafunctions).
Beispiel (fängt mit erster relevanter Zeile an und hört mit letzter relevanter Zeile auf):
Dahinter steckt wahrscheinlich, dass die Autoren nie die Perspektive des Anwenders - nein: des End-User Programmers - eingenommen haben.
Er möchte die Library einsetzen und nicht in ihr wie in einem Framework arbeiten. (Lüge 2)
Er braucht Heuristiken; ein hinreichend entwickeltes mentales Modell.
Z.B: Metafunktion statt Typ angeben (sonst müsste man ja nachschlagen, welcher Typ hier gilt)
Klassen-Templates werden in SeqAn, wie in http://trac.seqan.de/wiki/Tutorial/Metafunctions erklärt, als Metafunktionen eingesetzt. Also: Es geht nicht um Generic Classes (z.B: String<X>), sondern um Berechnungen, deren Ergebnis meist in ::Type steckt. vgl. auch Template Programming .
Die führt zu einer neuen Familie von Funktionen. Das Konzept - also Namensgebung, Aufgabengebiet, Funktionsumfang, ist neu und muss erklärt werden.
Funktion mit ohne ohne Value<...>.
Änderung hervorgehoben.
Seitentitel: How does SeqAn differ?
Linke Spalte:
void exchangeFirstValues(String<AminoAcid> & str)
{
if (length(str) < 2) return;
AminoAcid temp = str[0];
str[0] = str[1];
str[1] = temp;
}
Rechte Spalte:
template <typename T>
void exchangeFirstValues(T & str)
{
if (length(str) < 2) return;
typename Value<T>::Type temp = str[0];
str[0] = str[1];
str[1] = temp;
}
- Vorteil links: einfach zu schreiben
- Nachteil links: nicht generisch
- Vorteil rechts: generisch, mächtig
- Nachteil rechts: mehr zu schreiben
Bennenungskonventionen werden vom Alignment-Modul missachtet:
global/localAlign müsste globally/locallyAlign heißen
Align müssten Alignment heißen.
Metafunction::Value / ::VALUE (Value = real function / VALUE = static const variable; gibt statischen Wert zurück)
Unterschied bereits im Buch nicht geklärt (citep{gogol2009biological} S.52)
Anwender treffen in Tutorials (also beim Einsteig) auf dieses Problem
Sollte bei erster Erwähnung von Metafunctions verlinkt sein. There should be an explanation in the tutorials (4...
Z.B. First Steps Tutorial People found the link in the First Steps Tutorial ...
Grund: Erweiterbarkeit
Das global interface mit seinen global interface functions ist eine SeqAn zugrunde liegende Design-Entscheidung, welches technisch durch den Einsatz von Templatemetaprogrammierung realisiert wird.
Die Grundidee ist, dass es generisch benannte globale Funktionen gibt, die für bestimmte Eingaben spezialisiert werden können.
Funktionen können:
Die generischen Funktionen in SeqAn verändern ihr Verhalten also in Abhängigkeit ihrer Parameter.
Auch kann sich dabei der Rückgabewert ändern (was in C++ nicht unüblich ist):
Den Funktionen fehlt der Kontext / das starter/primary object, wie dies in den meisten OOP-Sprachen technisch erzwungen wird. In SeqAn existiert die Zugehörigkeit nur inhaltlich und muss der Dokumentation entnommen werden.
In seiner aktuellen Form führt das global interface zu Inkonsistenzen bzgl. STL.
Es gibt nicht nur das Start Object Problem, es kann auch sein, dass das Verb (also die Funktion) im Mittelpunkt steht.
Dann wäre der Gebrauch von globalen Funktion förderlich.
Abhängig vom Background des Anwenders, kann es aber auch sein, dass der Funktionsname und nicht das Object im Mittelpunkt steht. Also als erste Frage nicht womit ich etwas mache, sondern was -> verb(object) statt object.verb()
Grund: Polymorphie
Template-Spezialisierung:
String<TValue, TSpec>
Spec ist nicht nur atomar
String<Dna> myGenome; // A default string of nucleotides. String<Dna, Alloc<> > myGenome; // The same as above.
sondern kann selbst ein Template sein
String<Dna, Array<100> > genome
Ganze Programmkonstruktute bleiben größtenteils unverändert, wenn String<Dna> nach String<AminoAcid> geändert wird.
siehe auch Generezität
SeqAn war ursprünglich als Framework konzipiert.
Marker:
Weiterentwicklung zur Library
(wie sie schon immer beworben wurde!):
Aufzählung von C, dabei ist ja SeqAn abwärtskompatibel und ein Platformwechselunnötig.
Urpsünglich wurde DDDoc verwendet.
Explizit-argumentativ, Notwendigkeit wegen Konzepten (C++), da nicht in Doxygen unterstützt
Vermutlich die Dokumentationsqualität verringert, weil die Syntax und Lesbarkeit beeinflusst ist.
Werden verständlicher mit existierendem Fehlendes Benennungschema
Design-Feature von citep{GogolDoring:2009vz} zur besseren Usability
“I don’t like Shortcuts”
“If you read Peptide it makes you think that it’s more than a shortcut.” 7i: If you read Peptide it makes you think that it...
(weitere Zitate siehe Citations)
Stimmungsbild klar: Shortcuts nerven. Shortcuts kann man selber deklarieren. Shortcuts täuschen eine Komplexität vor, die es nicht gibt.
Wenn dann, technisch.
0 Leute für Domänen
Quelle SeqAn-Buch
Verschiedene Domäne werden vermischt:
z.B. technisches Vokabular: Alloc
fachlich:
- bioinformatik: String, Alphabets (Dna, Dna5, Rna, …), Gaps
- biologie: peptide
Gruppendiskussion: keiner spricht sich für Biologie aus
Wie erlaube ich API-Anwendern die Modifikation von Datenstrukturen.
Bei SeqAn:
Zwei Eigenschaften:
Begründung von Rahn (siehe ph): Abhängigkeiten (Technisches Wegargumentieren)
Nicht in Stylos, J., & Myers, B. (2007). Mapping the Space of API Design Decisions. Visual Languages and Human-Centric Computing, 2007. VL/HCC 2007. IEEE Symposium on, 50–60. doi:10.1109/VLHCC.2007.44 bibtex://Rosson:2007… besprochen!!!
Molekularbiologie
Exploring und Understanding Time deuten darauf hin, dass der Anwender tatsächlich kein Opportunist ist (sonst hätte er mehr Implementation Time)
Nur im Licht der anderen Beschreibungen so gedeutet, dass der modulare Aufbau von SeqAn Ursache ist für die Provisionality
Frage: “Who comes from the object-oriented world?” (me) Who comes from the object-oriented world? (15...
“Not enough experience to answer this."
“little experience"
Befragter spricht von “Funktionalität"
Die Bedeutung war mir erst unklar.
Der Befragte 60ba - progressiveEvaluation hat mr Klarheit verschafft. Dieser spricht davon, wie man eine Funktion genau anwendet. Das ist hier sehr wahrscheinlich auch gemeint gewesen.
Transkription:
Wenn es zu wenig Beispiele gibt oder ich nicht den Gebrauch einer Funktion verstehe, komme ich ins schleudern.
Beispiele wahrscheinlich nicht notwendig, ins Straucheln kommt der Anwender aber anscheinend trotzdem, wenn es keine Beispiele gibt.
Aus dem letzten Satz geht nicht hervor, ob die Code bei Metafunktionen allgemein oder nur bei uneindeutigen Funktionssignaturen verwendet.
Langjähriger sporadischer Gebrauch (Kenntnisse max. solide)
Langjähriger sporadischer Gebrauch (Kenntnisse max. solide)
Gründe sich mit SeqAn auseinanderzusetzen oder damit weiterhin zu arbeiten
Eng verwandt mit Helferlein
Anwender wollen SeqAn zunächst einmal kennenlernen / machen nicht den Eindruck, ein genaueres Ziel zu verfolgen.
Studentengefahr!
“kleines Tool"
“The two algorithms I tried to implement"
Der Anwender hat eine eigenen Sequenzanalyse-Tools entwickelt und testet,
ob SeqAn ihm dabei helfen kann, sie zu implementieren.
“tried to implement two algorithms I have created” in Kombination mit 7c79 - similiarSystems
Genome assembly refers to the process of taking a large number of short and putting them back together to create a representation of the original from which the DNA originated.
Erwartung, die durch Produkt / -beschreibung beim Anwender entsteht
Erwartung geweckt durch SeqAn-Beschreibung als Library
Details siehe Framework vs. Library
Anfänger loben den Funktionsumfang von SeqAn.
Mit SeqAn würde man viel gekapselte Funktionalität erhalten.
Die reale Beobachtung dazu ist: Mächtigkeit
Doku hilft am besten, Kluft zwischen Mächtigkeitseindruck und Mächtigkeit der API zu überwinden. citep{Robillard:2009cs}
Orthogonal: Performanceeindruck
~ wird mehr oder minder explizit als eine Erwartung formuliert.
- bei d3b2 - learningStyle zum Beispiel wird ein einfacher Einstieg angenommen (suggeriert durch Dokumentation)
Dem Anwender unbekannte LET / Konstrukte führen zu Verständnis- u. folglich zu Anwendungsschwierigkeiten.
Ist wie bei 60ba - hardMentalOperations der Interaktionsgrad mit anderen “Konzepten" / “Konstrukten” zu stark, erschwert dies die Programmentwicklung (Unmöglich, Langsam, Schnell) .
Beispiel: Metafunktionen
Vielleicht sogar nur Template Programming Konstrukte, die Probleme bereiten. Dafür spricht auch 7c79 - roleExpressiveness "form or variant or an idiom is used in place of another one”, wo sehr wahrscheinlichvon Templates die Rede ist
"For me, this is extremely un-intuitive"
Anwender (insb. Anfänger) glauben von SeqAn, es sei effizient - schnell.
Das kann als Motivation dienen (wenn nicht sogar die Motivation), SeqAn einzusetzen:
Die reale Beobachtung dazu ist: Performance
Orthogonal zu: Mächtigkeitseindruck
"seem to be extremely efficient"
“I’d consider moving to SeqAn for speed."
Tatsächliches Feature, dass die weitere Verwendung des Produkts fördert / motiviert
Ziel von Gogol: Erweiterbarkeit (die ja dann zur Mächtigkeit führt)
Anwender loben / stellen heraus die Mächtigkeit von SeqAn.
Also die Funktionsbreite (was man damit alles tun kann).
Die entspr. Erwartung ist: Mächtigkeitseindruck
“Algorithmen und Datenstrukturen bei Entwicklung von effizienten Programmen” 60ba - mainPurpose
Orthogonal zu: Performance
“a lot”, “the implemented alignment and search algorithms"
“laden von GTF files” 3ff7 - workStepUnit
Die entspr. Erwartung ist: Performanceeindruck
Dort sind auch Zitate als Beleg zu finden.
Schlechte Usability von Teilnehmer (z.B. 7i: understandable because of performance reasons) wegen Performance zwar als nachvollziehbar aber nicht als akzeptabel beschrieben. z.B. “SeqAn is completely different way of doing mostly the same thing” 7i: "SeqAn is a completely different way of doing ...
Orthogonal: Mächtigkeit
Arbeitet seit 4 Jahren mit SeqAn - weiß also, wovon er spricht
“I’d consider moving to SeqAn for speed."
Wie fähig und sicher ist der Anwender im Gebrauch von SeqAn?
Einfachstes SeqAn-Verständnis.
Typischer Indikator: Benutzer arbeiten einfach das Tutorial ab.
Entspricht ungefähr remember / understand nach Revision of Bloom‚ Taxonomy of Educational Objectives http://www.celt.iast...
Mitten im Verständnis-Prozess.
Indikator:
Entspricht ungefähr apply / analyze nach Revision of Bloom‚ Taxonomy of Educational Objectives http://www.celt.iast...
Programmentwicklung (Unmöglich, Langsam, Schnell)
Viel Rumprobieren ebenfalls in Letondal bei Bioinformatikern beobachtet - allerdings hätte das kaum den Verständnisprozess gefördert, sondern viele Anwender sind in der Herumprobieren, bis es passt-Phase verblieben cite{Letondal:2006dy}
Allgemeines EUSE-Problem: Ko:2011el
Anwender beherrscht SeqAn ausreichend, um eigenen Code zu schreiben.
Indikator:
Entspricht ungefähr evaluate / create nach http://www.celt.iastate.edu/teaching-resources/effective-practice/revised-blooms-taxonomy/ Revision of Bloom’s Taxonomy of Educational Objectives
In welcher Sprache fühlt sich der Anwender zu Hause?
Anwender hat einen C++-Hintergrund, was auf Erfahrungen im Umgang mit STL vermuten lässt.
Auch wenn unmittelbar von STL als Erfahrung gesprochen wird, wird dieser Code angewendet, da davon auszugehen ist, dass nicht die STL, sondern C++ im Allgemeinen gemeint ist.
C++-Anfänger haben einen separaten Code, denn bei Ihnen kann man nicht von einem Hintergrund sprechen.
C++ schwerer zu lernen als Java citep{zibran2008makes}
Anwender einen Hintergrund mit einer auf OOP basierten Programmiersprache wie Java.
Etwa die Hälfte der Gruppendiskussionsteilnehmer
Verwendung von Personas citep{Pruitt:2003ki} nach cite{Stylos:2007jb} sehr gut geeignet für API-Usability-Eval citep{Rosson:2007ip}
Eine Erklärungspremisse: ``Page 2 when given the choice, people tend to follow the path of least resistance.'' cite{Ko:2005cl}
Letondal, C. (2006). Participatory Programming: Developing Programmable Bioinformatics Tools for End-Users. In End User Development (Vol. 9, pp. 207?242). Dordrecht: Springer Netherlands. doi:10.1007/1-4020-5386-X_10
Häufig beobachtet, mit dem Kopf durch die Wand - nur das Ziel vor Augen. Kein systematischer Zugang. End User Programmer eben
Teilnehmer Alien: "I just don't see the difference between St... (grounding Ununterscheidbarkeit von Typen) wusste auch nach Workshop die Antwort nicht, hat aber Datentyp verwendet.
Eine Erklärungspremisse: ``Page 2 when given the choice, people tend to follow the path of least resistance.'' cite{Ko:2005cl}
Wie wird technisch SeqAn eingesetzt?
Ausdifferenzierung angesichts des Grounding zu interpretativ.
Entwickler lernen SeqAn und sehen als Einsatzzweck die Entwicklung von persistenten Tools,
die insbesondere IO- (SAM/BAM) und NGS-Funktionalität benutzt.
Möglicherweise wurde das aber auch nur aus Unwissenheit angegeben bzw. weil sie von Knut zum Workshop gedrängt wurden.
Interessanterweise betonen bibtext://Ko:2011el The State of the Art in End-User Software Engineering wie unsorgfältig und leichtgläubig Software von End Usern entwickelt wird, auch wenn sie dann (von anderen!) wiederverwendet werden.
Gehört nicht nach Kennenlernen / Evaluation weil Anwender schon zu lange mit SeqAn arbeitet.
SeqAn wird seit mehreren Jahren verwendet, um regelmäßig verwendete Anwendungen zu entwickeln.
Dabei entsteht eine Standalone-Anwendung, die sich unter anderem oder auch im großen Umfang auf SeqAn stützt.
7 Jahre Anwendungsentwicklung mit SeqAn
Weitgehend gruppiert nach citep{Grill:2012jm}
NICHT GRILL, eigentlich Eigenschaft für alle Probleme.
Separat gegliedert, um Theorie zu vereinfachen
Umfasst Probleme, die nicht auf eine allgemeine - nicht näher spezifizierte - Erwartung zurück gehen, sondern auf durch das Produkt bzw. dessen Beschreibung geweckt wurden.
SeqAn ist organisiert in Form von Core, Extras und Sandbox.
Erstellung innerhalb von Framework NUR mittels .py-Script
Nach Bereinigung der forward declarations endlich auch als .h-Datei nutzbar mit minimalem Skelett / Hello World-Beispiel
SeqAns API entspricht nicht den Erwartungen der Anwender. Sie bemängeln, dass die API nicht wie die STL ist.
Obwohl STL auf Template-basiert ist. 7i: STL is templatized (“main issue”, “expected to...
Genial! Wurde nur in Gruppendiskussion ermittelt. Vorteil der breiten Datenerhebung!
| Unterschied | Quelle | STL | SeqAn |
|---|---|---|---|
| Rückgabetyp | immer gleich | variabel Vorschlag von Kuchenbecker: Return values missing, (28:23) : Sollten separat dargestellt werden; ebenso Kuchenbecker: If there information not always true... da sich Verhalten stark unterscheiden kann. |
|
| Iterator-Syntax |
|
MyType::Iterator |
Iterator<MyType> Achtung! |
| Iterator-Modifikation | it + 2 |
it = begin(it) |
|
| Member-Funktionen | nur sehr wenige Ausnahmen; praktisch immer global | die meisten als Member implementiert |
Dem Anwender unbekannte LET / Konstrukte führen zu Verständnis- u. folglich zu Anwendungsschwierigkeiten.
Def.: Vom Anwender im Rahmen von Bottom-Up-Verstehen segmentierte Einheiten (cite{Pennington:1987dc}), die im Gegensatz zu syntaktischen Elementen, semantischer Natur sind. Also: Variablen, Funktionen, etc. aber nicht Schleifen, If/Else,.
Ist wie bei 60ba - hardMentalOperations der Interaktionsgrad mit anderen “Konzepten" / “Konstrukten” zu stark, erschwert dies die Programmentwicklung (Unmöglich, Langsam, Schnell) .
Beispiel: Metafunktionen — Iterator it != Iterator<X> (ersteres ist Klasse, zweites ist Metafiktion)
Vielleicht sogar nur Templatemetaprogrammierung Konstrukte, die Probleme bereiten. Dafür spricht auch 7c79 - roleExpressiveness "form or variant or an idiom is used in place of another one”, wo sehr wahrscheinlichvon Templates die Rede ist
Erstaunlich: Außer dem Begriff “Metafunktion” fallen keine anderen LET-Bezeichnungen. Ausdruck von mangelndem Verständnis, der auch stets zu beobachten ist.
Wichtig: Label in Doku wichtig. citep{Monperrus:2011bf}
Muss erklärt werden! Auch wenn SeqAn-Entwickler die Kenntnisse voraussetzen, denn existenziell wichtige Begriffe müssen erklärt werden --- unabhängig von den angenommenen Vorkenntnissen der Anwender. citep{Jeong:kf}
Befragter spricht von “Funktionalität"
Die Bedeutung war mir erst unklar.
Der Befragte 60ba - progressiveEvaluation hat mr Klarheit verschafft. Dieser spricht davon, wie man eine Funktion genau anwendet. Das ist hier sehr wahrscheinlich auch gemeint gewesen.
Transkription:
Wenn es zu wenig Beispiele gibt oder ich nicht den Gebrauch einer Funktion verstehe, komme ich ins schleudern.
Konstrukte = LET
Paraphrase: Unbekannte LET erschweren meine Programmentwicklung
Unbekannt, von welchen “Konzepten” und “Konstrukturen” die Rede ist.
Dem Anwender unbekannte LET / Konstrukte führen zu Verständnis- u. folglich zu Anwendungsschwierigkeiten.
Ist wie bei 60ba - hardMentalOperations der Interaktionsgrad mit anderen “Konzepten" / “Konstrukten” zu stark, erschwert dies die Programmentwicklung (Unmöglich, Langsam, Schnell) .
Beispiel: Metafunktionen
Vielleicht sogar nur Template Programming Konstrukte, die Probleme bereiten. Dafür spricht auch 7c79 - roleExpressiveness "form or variant or an idiom is used in place of another one”, wo sehr wahrscheinlichvon Templates die Rede ist
"why in a particular place a particular form or variant or an idiom is used in place of another one."
Funktionen sind nicht kategorisiert.
Die Zugehörigkeit mancher Funktionen im Quelltext wie length oder value kann nicht problemlos erkannt werden, wenn es diese überhaupt gibt.
citep{Stylos:2008jt} sprechen von “method ownership”
Kritisch: semantisch liegt method ownership vor, aber nicht mehr technisch
length hat tatsächlich keine Zugehörigkeit. Sie akzeptiert jedes Element und gibt im Zweifel 1 zurück.
Kategorie kann aufgabenbezogen (Quelle suchen!) oder subjektbezogen sein.
Beispiel: Aufgabenbezogen = Sequenzanalyse, Subjektbezogen: Sequenz
In OOP typischen Kategorisierungsinstrument: Klasse
“Was eine Funktion tut, erkennt man nur schwer, weil man nicht sieht, wozu sie gehören. Davon hängt ab, was sie tun."
Anfänger beschreiben, dass Sie anfänglich nicht wissen, welche Funktionen ans Ziel führen / helfen?
Mögliche Ursachen: Vocabulary Problem , Online-Dokumentation (Verbessert, Confusing) , (auch: Starter Object )
Ist immer mit viel Zeitaufwand verbunden!!!
Stand:
Fehlende Funktionskategorisierung ist Ursache für Probleme bei der Identifikation relevanter Funktionen
Behebung vom Identifikationsproblem:
Neben einer Funktionskategorisierung kann das auch eine sehr gute Suchfunktion sein.
Diese Information liegt vor, sie wird in der technischen Implementierung aber nicht abgebildet, sondern nur in der Doku.
in the documentation there is this kind of informa... (z.B. String.length)
wenig Bezug zur Frage; hat sich eher das Herz ausgeschüttet
Aus dem letzten Satz geht nicht hervor, ob die Code bei Metafunktionen allgemein oder nur bei uneindeutigen Funktionssignaturen verwendet.
Verschiedene Lesarten:
1. Ich muss mich erst an die vorhandene Funktionalität gewöhnen.
2. Ich muss erst verstehen, welchen Funktionen überhaupt bereit stehen.
Die Arbeit mit Iteratoren erfordert mehr Code als die Anwender erwarten.
Gründe:
wenig Erfahrung mit Iteratoren allgmein (mangelnde Sprachkenntnisse)
STL-Differenzen
Kein Überblick in Doku zu verfügbaren Funktionen, die Iteratoren zur Verfügung stehen,
denn Iterator ist “nur” eine Member Metafunktion, d.h. sie wird nur bei Konzepten als Doku-Eintrag dargestellt unter verfügbaren Member Metafunktionen.
Eine eigenständige Metafunction-Seite für Iterator existiert nicht.
Mögliche Operationen müssen daher unter der zurückgegebenen Klasse herausbekommen werden, deren Namen man erraten muss, da auch dieser Name in der Doku nicht genannt wird.
Das Verhalten / der Zweck einer Funktion kann nicht erkannt werden.
Warum? Weil die Funktionen nicht kategorisiert sind und somit nicht das primary/starter object erkennbar ist.
Beispiel:
TInfix label(frag, stringSet, seqID);
http://docs.seqan.de/seqan/develop/?p=Fragment#Fragment%23label
TAlphabet label(it);
http://docs.seqan.de/seqan/develop/?p=OutEdgeIterator#OutEdgeIterator%23label
Fehler werden vornehmlich von Anfängern / Workshop-Besuchern gemeldet
“Was eine Funktion tut, erkennt man nur schwer, weil man nicht sieht, wozu sie gehören. Davon hängt ab, was sie tun."
Wenn man weiß, welche Funktion hilft aber nicht, wie diese anzuwenden ist, stellt das ein Problem dar.
Mögliche Ursachen:
Weitere Formen / Teil-Bestandteile:
Konsequenz: Mangelnde Persistenz
wenig Bezug zur Frage; hat sich eher das Herz ausgeschüttet
Befragter spricht von “Funktionalität"
Die Bedeutung war mir erst unklar.
Der Befragte 60ba - progressiveEvaluation hat mr Klarheit verschafft. Dieser spricht davon, wie man eine Funktion genau anwendet. Das ist hier sehr wahrscheinlich auch gemeint gewesen.
Transkription:
Wenn es zu wenig Beispiele gibt oder ich nicht den Gebrauch einer Funktion verstehe, komme ich ins schleudern.
“Funktionalitaet mancher Konstruke zu ergründen ist"
“calling incorrect variant of a function"
Funktionen wie globalAlignment (http://docs.seqan.de/seqan/develop/?p=globalAlignment) haben mehrere Signaturen.
Den Anwendern fällt es schwer, die anzuwendene zu identifizieren.
Aus dem letzten Satz geht nicht hervor, ob die Code bei Metafunktionen allgemein oder nur bei uneindeutigen Funktionssignaturen verwendet.
Anwender schließt mit Rückgabewert auf die Funktionsweise der Funktion (hier: Bewegt sich der Iterator oder wird einer erzeugt)
“nicht weiß, ob der Iterator bewegt wird oder ein neuer erzeugt"
Der Typ vor der Variable herauszufinden (z.B. bei Rückgaben) ist schwierig.
“makes me feel stupid"
7c79 sagt, das führt manchmal dazu, dass eine falsche Variante ausgeführt wird
Die möglichen Tags werden praktisch nie dokumentiert. Höchstens die Standardbelegung (wenn es überhaupt eine gibt).
Siehe http://docs.seqan.de/seqan/develop/class_StringSet.html, alien: StringSets - different types of StringSets ...
Möglche Lösung: IDE-Support unterstützen possible solution: enrich the documentation to all...
“due to incorrect types”, “incorrect variant of a function"
Template Programming erschwert das Problem der Typisierung
“extremely messy” 7c79 - workStepUnit
allerhand Zitate in den Phänomenen
Ursache für zu geringe Work-Step Unit / Verbosität (Groß, Mittel, Gering) (“lot of overhead”, 7c79 - workStepUnit )
"Yep, SeqAn makes me feel stupid. Example: using incorrect type and calling incorrect variant of a function.” 7c79 - errorProneness
"require me to spend time on getting type casting right.“ 7c79 - provisionality
“Das erstellen der richtigen Typen mit Hilge von Metafunktionen kann sehr kompliziert sein.” 3ff7 - hardMentalOperations
“you need to take care of types, type casting, […] etc."
“typing / templates seem to be extremely messy"
Stichpunktartige Paraphrase:
- remembering complicated
-- many templates
-- many variants of types
-- many variants of templates
- difference unclear
-- e.g. Dna5 and Dna5String
Frage: Was ist gemeint, wenn hier von Templates gesprochen wird?
Funktions-Templates oder Klassen-Templates?
Sehr wahrscheinlich Klassen-Template, denn Funktions-Templates können meist so wie normale Funktionen aufgerufen werden.
Klassen-Templates werden in SeqAn, wie in http://trac.seqan.de/wiki/Tutorial/Metafunctions erklärt, als Metafunktionen eingesetzt. Also: Es geht nicht um Generic Classes (z.B: String<X>), sondern um Berechnungen, deren Ergebnis meist in ::Type steckt. vgl. auch Template Programming und Metafunktionen .
Die führt zu einer neuen Familie von Funktionen, die dem Anwender schwer fallen.
“many variants of types and templates"
> Typing
~ umfasst nämlich Metafunctionsaufrund die Angabe von Typen
“incorrect types”, “using incorrect type"
" require me to spend time on getting type casting right"
“Problems with types"
S4 = Advanced OOP system in R
BWT = http://en.wikipedia.org/wiki/Burrows–Wheeler_transform
“it was easier for me to understand S4 programming framework in R or how BWT works than to figure out what how to cast a variable to its correct type"
Mit Ein- u. Ausgabe sind im Kontext seiner anderen Worten nicht I/O sondern die Vewendung von Metafunktionen bzw Typisierung gemeint
Sehr wahrscheinlich probiert der Anwender “wild” rum.
Besonders relevant, da User seit 4 Jahren
Problem: Es gibt keine direkte setX-Methode sondern die Konfiguration findet mit einem separaten Config- oder Options-Objekt statt, was API-Anwender sehr schwer fällt herauszubekommen. cite{Stylos:2008jt}
Liegt bei AlignConfig vor. (Es sei denn, Doku ist klar und wird von Anwendern verstanden.)
Die Funktionsweise - also was tut die Funktion - einer Funktion ist nicht selbsterklärend bzw. es bestehen Unsicherheiten.
Anwender schließt mit Rückgabewert auf die Funktionsweise der Funktion (hier: Bewegt sich der Iterator oder wird einer erzeugt)
“Das fällt mir in der Tat noch recht schwer."
"z.B. nicht weiß, ob der Iterator bewegt wird oder ein neuer erzeugt, usw."
Es passt erstaunlich viel in eine Code-Zeile.
ähnelt etwas Mächtigkeitseindruck und Performance
Erschwert a202 - workStepUnit und 7c79 - workStepUnit das Verständnis (wahrscheinlich wegen Metafunktionen ) - klein bevorzugt.
Tenor: Anfänger wünschen sich mehr Transparenz und eine geringere Work-Stop Unit.
Beispiel: Versteckte Parameterübergabe , Ununterscheidbarkeit von Typen (möchte Implementierungsdetails kennen)
Wünschen sich große Work-Step Unit Work-Step Unit auffällig gering.
3ff7 - workStepUnit hält sie bei IO für positiv. Bei Iteratoren für zu klein (also: zu viel Zeilen für zu wenig Ergebnis).
Z.B. 3ff7 - workStepUnit (verbose Iteratoren)
Z.B. 7c79 - workStepUnit (Typing “overhead")
Tenor: Erfahrene mögen keinen aufblähten Code, wenn das auf rein technische Gründe zurück geht.
"a lot"
Mit efficient scheint hier auch die Implementierung- und nicht nur die Laufzeit gemeint zu sein.
“eher wenig [nowendiger Code]"
~ sind API-Bestandteile, von denen der Anwender keine Kenntnis haben muss.
Bei APIs geht es darum, wie sie Funktionalität zur Verfügung stellt, nicht wie sie implementiert ist. citep{Conway:2005va}
Auch schlecht nach citep{Piccioni:2013uq,Bloch:2006jk}.
Nicht zu Verwechseln mit "Incorrect Visibility" (z.B. durch public/private) citep{Zibran:2011fx}!
Mangelnde Abstraktion darf nicht aus Faultheit in Kauf genommen werden. citep{Henning:2007kg}
Alien: Problem occurred in the index tutorial hat konkret die Arbeit mit Index , hash und getOccurrences gemeint:
Quelle: http://seqan.readthedocs.org/en/latest/Tutorial/IndexQGram.html (wichtig in Fett )
int main() { typedef Index<DnaString, IndexQGram<UngappedShape<3> > > TIndex; TIndex index("CATGATTACATA");
hash(indexShape(index), "CAT");
for (unsigned i = 0; i < length(getOccurrences(index, indexShape(index))); ++i)
std::cout << getOccurrences(index, indexShape(index))[i] << std::endl;
return 0;
}
Hier muss die interne Struktur von Align verändert werden (erst resize + 2 assignSource), was zu einem inkonsistenten Zustand des Objekts führen kann. Hier werden einfachste Einsichten der SE ignoriert. Nämlich dass es explizite Init-Phasen geben muss, die eine Invariante zur Folge haben.
Die Angabe von redundanten Informationen kann dazu, dass Objekte nicht korrekt initialisiert werden, weil die Initialisierung in Einzelschritten dem Anwender aufgebürdet wird (siehe Align-Beispiel in Sichtbarmachung der Implementierung )
~ bedeutet, dass Anwender filigranere Entscheidungen treffen müssen, als notwendig wäre.
Beispiele:
Werden verständlicher mit existierendem Fehlendes Benennungschema
Design-Feature von citep{GogolDoring:2009vz} zur besseren Usability
“I don’t like Shortcuts”
“If you read Peptide it makes you think that it’s more than a shortcut.” 7i: If you read Peptide it makes you think that it...
(weitere Zitate siehe Citations)
Stimmungsbild klar: Shortcuts nerven. Shortcuts kann man selber deklarieren. Shortcuts täuschen eine Komplexität vor, die es nicht gibt.
Wenn dann, technisch.
0 Leute für Domänen
Die Arbeit mit Iteratoren erfordert mehr Code als die Anwender erwarten.
Gründe:
wenig Erfahrung mit Iteratoren allgmein (mangelnde Sprachkenntnisse)
STL-Differenzen
Kein Überblick in Doku zu verfügbaren Funktionen, die Iteratoren zur Verfügung stehen,
denn Iterator ist “nur” eine Member Metafunktion, d.h. sie wird nur bei Konzepten als Doku-Eintrag dargestellt unter verfügbaren Member Metafunktionen.
Eine eigenständige Metafunction-Seite für Iterator existiert nicht.
Mögliche Operationen müssen daher unter der zurückgegebenen Klasse herausbekommen werden, deren Namen man erraten muss, da auch dieser Name in der Doku nicht genannt wird.
~ bedeutet, dass Anwender filigranere Entscheidungen treffen müssen, als notwendig wäre.
Beispiele:
~ sind API-Bestandteile, von denen der Anwender keine Kenntnis haben muss.
Bei APIs geht es darum, wie sie Funktionalität zur Verfügung stellt, nicht wie sie implementiert ist. citep{Conway:2005va}
Auch schlecht nach citep{Piccioni:2013uq,Bloch:2006jk}.
Nicht zu Verwechseln mit "Incorrect Visibility" (z.B. durch public/private) citep{Zibran:2011fx}!
Mangelnde Abstraktion darf nicht aus Faultheit in Kauf genommen werden. citep{Henning:2007kg}
Alien: Problem occurred in the index tutorial hat konkret die Arbeit mit Index , hash und getOccurrences gemeint:
Quelle: http://seqan.readthedocs.org/en/latest/Tutorial/IndexQGram.html (wichtig in Fett )
int main() { typedef Index<DnaString, IndexQGram<UngappedShape<3> > > TIndex; TIndex index("CATGATTACATA");
hash(indexShape(index), "CAT");
for (unsigned i = 0; i < length(getOccurrences(index, indexShape(index))); ++i)
std::cout << getOccurrences(index, indexShape(index))[i] << std::endl;
return 0;
}
Hier muss die interne Struktur von Align verändert werden (erst resize + 2 assignSource), was zu einem inkonsistenten Zustand des Objekts führen kann. Hier werden einfachste Einsichten der SE ignoriert. Nämlich dass es explizite Init-Phasen geben muss, die eine Invariante zur Folge haben.
Die Angabe von redundanten Informationen kann dazu, dass Objekte nicht korrekt initialisiert werden, weil die Initialisierung in Einzelschritten dem Anwender aufgebürdet wird (siehe Align-Beispiel in Sichtbarmachung der Implementierung )
Beeinflusst Usability citep{zibran2008makes}
Sinnvolle Benennung verbessert das Verständnis sowohl von weniger als auch viel erfahrenen Programmierern und fremden Quellcode citep{Crosby02theroles}
Klasse muss groß anfangen citep{zibran2008makes}
Soll nah an Anwendungsdomäne sein citep{BenShneiderman:gn}
ABER: Was ist, wenn Anwendungsdomäne fachübergreifend ist? String<AminoAcid> oder Peptide? (aber auch CRUD aus dem Datenbankbereich)
Das Verhalten / der Zweck einer Funktion kann nicht erkannt werden.
Warum? Weil die Funktionen nicht kategorisiert sind und somit nicht das primary/starter object erkennbar ist.
Beispiel:
TInfix label(frag, stringSet, seqID);
http://docs.seqan.de/seqan/develop/?p=Fragment#Fragment%23label
TAlphabet label(it);
http://docs.seqan.de/seqan/develop/?p=OutEdgeIterator#OutEdgeIterator%23label
Fehler werden vornehmlich von Anfängern / Workshop-Besuchern gemeldet
Leider keinen Schimmer, was genau er nicht mag.
Die nicht-unterscheibdaren Namen?
Technisch vs. Domäne?
...
Unterschied zwischen Dna5 und Dna5String unklar.
Entweder fehlt die Erklärung des Benennungsschemas und letzteres existiert gar nicht.
Weitere Beispiele könnten auch sein String<String> und StringSet.
Wäre es da würde es folgendes tun:
Shortcuts erklärt und erkennbar gemacht, also dessen Role Expressiveness (Unzuverlässig) erhöht
Shortcuts erzeugen Redundanzen und nerven
Z.B. String<Dna> und DnaString
Von GM: "It's just stupid”, “what’s the difference. it... “it’s just stupid”, “what’s the difference?!"
Von “everyone you needs a shortcut would just define h... (grounding Synonyme / Redundanz) als unnötig angesehen. Kann man selbst erstellen, wenn man das für notwendig hält. (großer Teil (der was sagte) stimmte in Diskussion zu)
Stichpunktartige Paraphrase:
- remembering complicated
-- many templates
-- many variants of types
-- many variants of templates
- difference unclear
-- e.g. Dna5 and Dna5String
Frage: Was ist gemeint, wenn hier von Templates gesprochen wird?
Funktions-Templates oder Klassen-Templates?
Sehr wahrscheinlich Klassen-Template, denn Funktions-Templates können meist so wie normale Funktionen aufgerufen werden.
Klassen-Templates werden in SeqAn, wie in http://trac.seqan.de/wiki/Tutorial/Metafunctions erklärt, als Metafunktionen eingesetzt. Also: Es geht nicht um Generic Classes (z.B: String<X>), sondern um Berechnungen, deren Ergebnis meist in ::Type steckt. vgl. auch Template Programming und Metafunktionen .
Die führt zu einer neuen Familie von Funktionen, die dem Anwender schwer fallen.
Der Name einer Sache suggeriert eine Abstraktion, die es nicht gibt.
Beispiel: Peptide
Ähnliche Typen wie String, StringSet und array (z.B. SuffixArray) können nicht unterschieden werden.
Ursache: Fehlendes Benennungschema (bereits kodiert)
Im Unterschied zur Ununterscheidbarkeit von LET geht es hier um die gleiche LET.
Bei d3b2 - hardMentalOperations scheint es um Container zu gehen.
“I just don’t see the difference between StringSet and String of Strings”, Alien: "I just don't see the difference between St...
Gleiche Person:
- “I opened the documentation [and] just didn’t get the usage of StringSet. What you could do with StringSets you could also have done with String of Strings."
Antworten von SeqAn-Entwicklern auch nicht deutlich. Ungefähre Zusammenfassung: An manchen Stellen braucht man sie und an manchen nicht unbedingt.
Aber: Keine Standardempfehlung immer StringSets zu nehmen, denn es gibt auch Ausnahmen. Zumindest wird auf http://seqan.readthedocs.org/en/latest/Tutorial/SimpleRnaSeq.html zur Speicherung von Intervallen ein String<String> verwendet, was bei Kuchenbecker: [The latter] is not even true since ... für Irritationen führt.
String<String<TInterval> > intervals;
Wortlaut: "multiple definitions for strings, string sets and arrays"
Es gibt zwei Deutungsmöglichkeiten:
1. Es gibt jeweils für Strings, String Sets und Arrays verschiedene Definitionen (z.B. String<DNA>, String<DNA5>, AllocString<…>)
2. Der Unterschied zwischen Strings, String Sets und Arrays ist nicht klar zu erkennen.
Stichpunktartige Paraphrase:
- remembering complicated
-- many templates
-- many variants of types
-- many variants of templates
- difference unclear
-- e.g. Dna5 and Dna5String
Frage: Was ist gemeint, wenn hier von Templates gesprochen wird?
Funktions-Templates oder Klassen-Templates?
Sehr wahrscheinlich Klassen-Template, denn Funktions-Templates können meist so wie normale Funktionen aufgerufen werden.
Klassen-Templates werden in SeqAn, wie in http://trac.seqan.de/wiki/Tutorial/Metafunctions erklärt, als Metafunktionen eingesetzt. Also: Es geht nicht um Generic Classes (z.B: String<X>), sondern um Berechnungen, deren Ergebnis meist in ::Type steckt. vgl. auch Template Programming und Metafunktionen .
Die führt zu einer neuen Familie von Funktionen, die dem Anwender schwer fallen.
“difference between say Dna5 and Dna5String"
http://seqan.readthedocs.org/en/latest/Tutorial/SimpleRnaSeq.html
Kuchenbecker:
Stört deutlich, dass ein biologischer Term mit einem informatischen Term gemischt wird (Beispiel: Peptide und String<AminoAcid>
Leichte Variante findet er hingegen gut in Ordnung (String<Dna> vs. DnaString)
Entsprechend wird AminoAcidString bzw. String<AminoAcid> dem Peptide klar vorgezogen (“as ugly as it sounds you cannot just call it Peptide”, “that would be consistent"
Designziel von Gogol-Döring war, eine DSL ähnliche Sprache zu entwickeln (siehe SeqAn-Buch)
"Pennington konnte beobachten, dass die Probanden bei der Beschreibung von Prozeduren und des Kontrollflusses mehrheitlich eine technische Terminologie, also Begriff aus der Lösungsdomäne verwendet haben. Hingegen kamen bei der Beschreibungen von funktio- nalen Aspekten vorzugsweise Begriffe aus der Problemdomäne zum Einsatz. Diese Beob- achtung harmonisiert mit dem Situationsmodellbegriff von van Dijk and Kintch (1983), da dieser ja erst die Brücke von der Lösungswelt in die Problemwelt schlägt.” (Diss) ALSO: These: (in Verbindung mit Shaft) Je mehr die Anwender Domänenwissen haben (also aus der Biologie kommen), desto eher erwarten Sie eine Domänensprache. Informatiker eindeutig technisch. Frage: Was präferieren Bioinformatiker?
Verwandt mit Paradigmatische Prägung (C++, Java, C++-Anfänger) verwendet Namenerraten
Kann auch suggerieren, dass Peptide mächtiger / mehr wäre, als nur ein String von AminoAcids (was in der Realität ja auch so ist).
“no no no no” 7i: "no no no no" (when I was saying domain-specif...
Anfänger beschreiben, dass Sie anfänglich nicht wissen, welche Funktionen ans Ziel führen / helfen?
Mögliche Ursachen: Vocabulary Problem , Online-Dokumentation (Verbessert, Confusing) , (auch: Starter Object )
Ist immer mit viel Zeitaufwand verbunden!!!
Stand:
Fehlende Funktionskategorisierung ist Ursache für Probleme bei der Identifikation relevanter Funktionen
Behebung vom Identifikationsproblem:
Neben einer Funktionskategorisierung kann das auch eine sehr gute Suchfunktion sein.
Diese Information liegt vor, sie wird in der technischen Implementierung aber nicht abgebildet, sondern nur in der Doku.
in the documentation there is this kind of informa... (z.B. String.length)
Ähnliche Typen wie String, StringSet und array (z.B. SuffixArray) können nicht unterschieden werden.
Ursache: Fehlendes Benennungschema (bereits kodiert)
Im Unterschied zur Ununterscheidbarkeit von LET geht es hier um die gleiche LET.
Bei d3b2 - hardMentalOperations scheint es um Container zu gehen.
“I just don’t see the difference between StringSet and String of Strings”, Alien: "I just don't see the difference between St...
Gleiche Person:
- “I opened the documentation [and] just didn’t get the usage of StringSet. What you could do with StringSets you could also have done with String of Strings."
Antworten von SeqAn-Entwicklern auch nicht deutlich. Ungefähre Zusammenfassung: An manchen Stellen braucht man sie und an manchen nicht unbedingt.
Aber: Keine Standardempfehlung immer StringSets zu nehmen, denn es gibt auch Ausnahmen. Zumindest wird auf http://seqan.readthedocs.org/en/latest/Tutorial/SimpleRnaSeq.html zur Speicherung von Intervallen ein String<String> verwendet, was bei Kuchenbecker: [The latter] is not even true since ... für Irritationen führt.
String<String<TInterval> > intervals;
Ähnliche Typen wie Dna5 und Dna5String können nicht unterschieden werden.
Bei 7c79 - hardMentalOperations geht es um den Unterschied zwischen atomaren und containerartigen Typen.
In der Tat müsste Dna5String Dna5 heißen. Und Dna5 müsste der Aufzählungstyp NucleotideN lauten.
Muss konzeptionell korrekt sein citep{Zibran:2011fx}
Stichpunktartige Paraphrase:
- remembering complicated
-- many templates
-- many variants of types
-- many variants of templates
- difference unclear
-- e.g. Dna5 and Dna5String
Frage: Was ist gemeint, wenn hier von Templates gesprochen wird?
Funktions-Templates oder Klassen-Templates?
Sehr wahrscheinlich Klassen-Template, denn Funktions-Templates können meist so wie normale Funktionen aufgerufen werden.
Klassen-Templates werden in SeqAn, wie in http://trac.seqan.de/wiki/Tutorial/Metafunctions erklärt, als Metafunktionen eingesetzt. Also: Es geht nicht um Generic Classes (z.B: String<X>), sondern um Berechnungen, deren Ergebnis meist in ::Type steckt. vgl. auch Template Programming und Metafunktionen .
Die führt zu einer neuen Familie von Funktionen, die dem Anwender schwer fallen.
“many variants of types”, “Dna5 and Dna5String"
Wenn schon Shortcuts, dann bitte auch konsistent
ff
Wahrscheinliche Ursache:
Die Relation zwischen Klassen (aba9: “Abstrakte Klassen”) und Spezialisierungen (aba9: “Unterklassen”) ist schwierig zu erkennen.
In DDoc nicht nachvollziehbar. Möglicherweise fehlt das Diagramm bei manchen Klassen.
In Dox gelöst durch explizite Angabe mittels "All Subcl’s”.
… inkonsistent.
Beispiel:
Bei Align<…> align; lautet der getter für eine Zeile “row”.
Hingegen lautet der getter für eine shape “indexShape” (und das liegt nicht an einem Namenskonflikt, “shape” gibt es als Funktion nicht). Stiftet Verwirrung in Verbindung mit Funktionsrückgabenmodifikation , da man der Funktion schon so kaum ihr Rückgabe-Verhalten ansieht.(InBezug auf Programmverständnis).
Ebenso setter: Normalerweise kann assign verwendet werden. Bei Align (http://seqan.readthedocs.org/en/latest/Tutorial/AlignmentRepresentation.html) lautet es hingegen assignSource
In SeqAn gibt es folgende unübliche Konstrukte:
Problem: nicht intuitiv / erwartet, nicht konsistent( siehe anderer Code)
infix(myString, 1, 1) = "cgt";
Macht aus Zeichenkette ATTACGG -> ACGTTTACGG
http://seqan.readthedocs.org/en/master/Tutorial/Modifiers.html
Frage zur Behebung in Gruppendiskussion:
- Klares Votum für mehr Konsistenz (also assign XOR =)
- Argument für assign von René: Container-Element-Abhängigkeiten können bei assign berücksichtigt werden (müsste doch auch bei overloading gehen…?!)
Problem: hash(indexShape(index), “CAT”), hash modifiziert die Rückgabe von indexShape
Quelle: http://seqan.readthedocs.org/en/latest/Tutorial/IndexQGram.html (wichtig in Fett)
int main() { typedef Index<DnaString, IndexQGram<UngappedShape<3> > > TIndex; TIndex index("CATGATTACATA"); hash(indexShape(index), "CAT"); for (unsigned i = 0; i < length(getOccurrences(index, indexShape(index))); ++i) std::cout << getOccurrences(index, indexShape(index))[i] << std::endl; return 0; }
Ebenso http://seqan.readthedocs.org/en/latest/Tutorial/AlignmentRepresentation.html :
resize(rows(align), 2);
ABER: Nicht immer wird eine Referenz zurückgegeben, was dazu führt, dass die Wertzuweisung nicht immer funktioniert (= wenn Values zurückgegeben wird)
Wenn schon Shortcuts, dann bitte auch konsistent
Explizite Datenstrukturmodifikationen funktionieren nicht immer!
Manchmal wird Kopie anstelle von Referenz zurückgegeben
Best Practise fehlt
Ein Anwender zog die implizite Zuweisung sogar vor, wenn es dadurch alles wenigstens konsistent ist.
Warum nicht + wie bei Konkatenation von Strings?
appendValue(x, value) http://docs.seqan.de/seqan/develop/?p=StringConcept#appendValue
TSequence seq1 = "TTGT"; TSequence seq2 = "TTAGT"; TStringSet strings; appendValue(strings, seq1); appendValue(strings, seq2); TAlignGraph alignG(strings);
~ sind Parameterübergaben, die nicht explizit geschehen, sondern in einem Objekt gespeichert werden, das als Parameter dient.
AL: Problem occurred in the index tutorial hat konkret die Arbeit mit Index , hash und getOccurrences gemeint:
Quelle: http://seqan.readthedocs.org/en/latest/Tutorial/IndexQGram.html (wichtig in Fett)
int main() { typedef Index<DnaString, IndexQGram<UngappedShape<3> > > TIndex; TIndex index("CATGATTACATA"); hash(indexShape(index), "CAT"); for (unsigned i = 0; i < length(getOccurrences(index, indexShape(index))); ++i) std::cout << getOccurrences(index, indexShape(index))[i] << std::endl; return 0; }
Die Online-Dokumentaton ist schwer zu finden.
Im Vergleich zu damals (User verwendet SeqAn schon lange) haben sich Lern-Ressourcen verbessert.
S4 = Advanced OOP system in R
BWT = http://en.wikipedia.org/wiki/Burrows–Wheeler_transform
“a less confusing API reference"
Das Lernen von SeqAn erfordert Orientierungshilfen (z.B. Überblick), die aktuell nicht ausreichen.
Beispiele:
aba9 - prematureCommitment “Gesamtüberblick”
a202 - personal “übersichtlich"
Führt zu Individuelle Programmentwicklung aufwendig
Lösung:
Verschiedene Lesarten:
1. Ich muss mich erst an die vorhandene Funktionalität gewöhnen.
2. Ich muss erst verstehen, welchen Funktionen überhaupt bereit stehen.
Jede Art von Orientierung fehlen.
Systematik / Überglick über LETs fehlen.
Mögliche Ursache
S4 = Advanced OOP system in R
BWT = http://en.wikipedia.org/wiki/Burrows–Wheeler_transform
“[need] a book: a properly written hard-copy book-manual-reference. Like the R book."
ff
Wahrscheinliche Ursache:
Die Relation zwischen Klassen (aba9: “Abstrakte Klassen”) und Spezialisierungen (aba9: “Unterklassen”) ist schwierig zu erkennen.
In DDoc nicht nachvollziehbar. Möglicherweise fehlt das Diagramm bei manchen Klassen.
In Dox gelöst durch explizite Angabe mittels "All Subcl’s”.
1. Teilsatz unklar
Die Funktionsbreite ist laut 7c79 - personal unklar.
Daher stellt an sich die Frage, welche Funktionalität nun durch C++ und welche durch SeqAn erbracht wird.
In den Online-Quellen gibt es (viel) zu wenig Beispiele.
Das erschwert das Verständnis und die Arbeit am eigenen Code.
Bereits viel besser (alle wichtigen Datentypen abgedeckt) in Dox.
Mögliches generelles Problem:
- “SeqAn Spirit” - also welche Grundprinzipien hat SeqAn - wird nicht vermittelt
1. Teilsatz unklar
ff
Wahrscheinliche Ursache:
Die Relation zwischen Klassen (aba9: “Abstrakte Klassen”) und Spezialisierungen (aba9: “Unterklassen”) ist schwierig zu erkennen.
In DDoc nicht nachvollziehbar. Möglicherweise fehlt das Diagramm bei manchen Klassen.
In Dox gelöst durch explizite Angabe mittels "All Subcl’s”.
Anwender schließt mit Rückgabewert auf die Funktionsweise der Funktion (hier: Bewegt sich der Iterator oder wird einer erzeugt)
Anwender gibt an, dass er mittels Rückgabedokumentation auf das fehlende Anwendungsbeispiel schließt
Befragter spricht von “Funktionalität"
Die Bedeutung war mir erst unklar.
Der Befragte 60ba - progressiveEvaluation hat mr Klarheit verschafft. Dieser spricht davon, wie man eine Funktion genau anwendet. Das ist hier sehr wahrscheinlich auch gemeint gewesen.
Transkription:
Wenn es zu wenig Beispiele gibt oder ich nicht den Gebrauch einer Funktion verstehe, komme ich ins schleudern.
“wenig Beispiele"
Anwender klagen über verschiedene Lösungswege (soll ich einen C-, C++- oder SeqAn-String verwenden?).
Es fehlt es Erklärung, was üblich und “erwünscht” ist.
Die Konfrontation mit dem Problem wird mit “Verwirrung” beschrieben.
Ursachen:
Mögliche Ursache
Der Rückgabetyp von Funktionen wird sehr häufig nicht dokumentiert.
Sehr häufig handelt es sich um Rückgaben von Metafunktionen die nur als T[Placeholder] (z.B. TSize der TFibre) bezeichnet aber nicht weiter erklärt werden. In http://docs.seqan.de/seqan/dev3/class_Index.html#Index%23indexText TFibre indexText(index) wird beispielsweise TFibre mit den Worten “A reference to the text of the index” beschrieben. Im entsprechenden Code-Beispiel wird der Wert nicht einer Variablen zugewiesen, so dass man auch dort den Typ nicht feststellen kann.
Es wäre eine Verbesserung, statt
TFibre indexText(index);
folgendes zu schreiben:
Fibre<TContainer, TSpec>::Type indexText(index);
“Was eine Funktion tut, erkennt man nur schwer, weil man nicht sieht, wozu sie gehören. Davon hängt ab, was sie tun."
Scheint intevenierende Bedingung in diesem Fall zu sein.
Hätte das Problem wahrscheinlich abgeschwächt.
Anwender schließt mit Rückgabewert auf die Funktionsweise der Funktion (hier: Bewegt sich der Iterator oder wird einer erzeugt)
“recht schlecht Dokumentiert welche Funktionen welche Rückgabewerte besitzen"
nicht klar, ob “schwer danach” oder nicht “schwer darin” gemeint ist.
Daher Suchfunktion (Umständlich) und Auffindbarkeit
Die Suche wird als umständlich beschrieben.
Insbesondere die Sortierung von Suchergebnissen.
nicht klar, ob “schwer danach” oder nicht “schwer darin” gemeint ist.
Daher Suchfunktion (Umständlich) und Auffindbarkeit
Die Sortierung der Suchergebnisse positionierte in der bis dato gültigen Version die Elemente in keiner zu erwartenten Reihenfolge.
Eine Verbesserung von Manuel Holtgrewe verbesserte die Situation; die Ordnung war dennoch nicht nachvollziehbar.
In Dox 3 ist das Problem gelöst:
Auch nach Verbesserungen unzureichend:
Z.B. Iterator-Metafunktion eigentlich das, was man sucht, wenn man “iterator” eintippt.
Aber Suchtreffer sieht wie folgt aus (der Suchtreffer ist eine Member-Metafunktion von ContainerConcept):
Assignments werden als Hilfreich beschrieben.
Hier sind nur noch die überarbeiteten Tutorials erfasst.
Zeigt die Verbesserung!
Erleichert den Einstieg in SeqAn.
Allerdings wird das Bearbeiten der Tutorials als mühsam bezeichnet bzw. als Prozess, bei dem man “Disziplin” braucht aba9 - learningStyle
Die Anwender verstehen Compiler-Meldungen nicht.
Viele Gruppendiskussionsteilnehmer stimmen zu. a few people agreed that it's hard to read the com...
Wird als besonders nervig empfunden, wenn “error is in some SeqAn file” oder “it’s kind of annoying that it doesn’t even tell you the line" “it’s kind of annoying that it doesn't even tell y...
Lediglich einfache Syntax-Probleme werden als relativ leicht behebbar beschrieben. alien: errors concerning missing semicolons, inclu...
Nicht machbar für SeqAn (zu aufwendig): End-To-End-Compiler citep{Stylos:2009ts}
~ beschreibt, dass ein Versagen erst viel später sichtbar wird, als der Anwender erwarten würde. Dies ist zum Beispiel bei dem Lesen von SAM/BAM-Dateien der Fall. Aus Effizienzgründen werden fehlerhafte Symbole beim Einlesen solcher Dateien als Nukleotid A dargestellt.
Ein derartiges Versagen führt aber nicht zum Abbruch oder einer darauf hinweisenden Ausage des Programms. Erst die inhaltliche Analyse der Ergebnisses lässt möglicherweise Rückschlüsse auf das fehlertolerante Lesen zu.
Weitere Quelle aus HE: LENGTH, warum ist LENGTH(5) = 1?
Eine Check-Möglichkeit existiert aktuell nicht.
“How doy ou know something is not okay?” How do you know something is not okay?
“Analysis is consequently erroneous” Analyse is consequently erroneous
“Fixing the problem can take a long time until you figured out that you had a typo” Fixing the problem can take a long time until you ...
“posed a lot of problems just because of a small mistake” further support by Greek woman “posed a lot of pro... , “I experienced the problem my own” Problem also nicht nur theoretisch sondern real.
An dieser Stelle wird empfohlen, jeder fehlertoleranten Funktionalität die Konfigurationsmöglichkeit zu geben , Hinweise zu geben oder gar Ausnahmen zu werfen, wenn von der Toleranz Gebrauch gemacht wurde Error expected, or exception, it aborts or a warni... .
Standardmäßig immer checken further support by 7i “by default you check everyt... .
Option zum nicht checken, wenn man weiß, dass eigene Daten sauber sind. 7i: If you know your data is sane - that's why yo...
Negativer Einfluss auf Performance Jochen: Down-side runtime “you have to pay a price...
Gegenantwort: Die Zeit, die man hier spart, muss man an anderer Stelle vielfach zahlen. 7i: Yes it takes time but the time you need to fin...
Wurde am 01.07.2014 von Manuel Holtgrewe als “Gut” bezeichnet.
Insbesondere wenn Exceptions denn Anwender dazu zwingen, einen Fehlerfall zu behandeln.
“Does it cause problems?”
Answer: Yes
NICHT VON GRILL (= BEITRAG)
Alles zum Thema Integration von SeqAn in die IDE des Anwenders
eb6d - personal
Keine Erstellung von Apps möglich,
bereits einmal Bachlor-Ausschreibungsthema gewesen (Kritik bereits während der Workshops Workshop '11 apiua://workshop/201... geäußert)
Anleitung zur Erzeugung von Projektdateien ausschließlich für Kommandozeile (siehe http://trac.seqan.de/wiki/Tutorial/GettingStarted/MacXcode#HelloWorld)
Die fehlende Autovervollständigung wird bemängelt.
Auch wenn andere Strategie verwendet wird, sagen die Teilnehmer der Gruppendiskussion, dass sie das Feature dennoch erwarten! Hälfte der Teilnehmer haben OOP-Background.
Nur behebbar, wenn IDE Concepts unterstützt, was in einem neueren Sprachstandard wohl funktionieren dürfte.
Anderenfalls wüsste die IDE nicht, ob die Funktion tatsächlich das im Raum stehende Objekt als Argument akzeptiert.
Proxy für Would use the online documentation.
Aktuell sind 3 Strategytypen bekannt:
Strategien zum Erkundschaften und Auffinden von Library-Bestandteilen
DIese Strategie besteht in der Eingabe von “.” nach einem Object, um die anwendbaren / zur Verfügung stehenden Funktionen zu ermitteln.
Kann nur in Langzeitbeobachtung (inkl. ganzes Benennungsproblem) evaluiert werden. no need for auto-complete since they already knew ...
Verwendung von Buffer-Autocompletion wie sie durch Editoren wie vi angeboten werden.
Nicht bekannt, ob vi den gesamten Quellcode parsed oder nur selbst geschriebenes.
In letzerem Fall stehen nur Funktionen bereit, die man bereits verwendet hat.
Die Eigenschaften einer Sache werden erraten.
Ist ein Name nicht bekannt, wird der Name erraten.
Dazu werden bekannte / typische Bezeichner verwendet und die Namenskonvetion (z.B. CamelCase) verwendet.
Strategien zum Erlernen eines Produkts / SeqAns
Die Möglichkeiten, mal einfach herumzuprobieren / experimenten sind eingeschränkt.
Hypothesen zum Verständnis der Funktionsweise von SeqAn können nicht überprüft werden
Genannte Ursache bisher:
Programmentwicklung (Unmöglich, Langsam, Schnell)
Schweiter immer wieder am Nicht-Kompilieren (siehe 3ff7 - progressiveEvaluation (grounding Kompilieren (Schei)tert) bedingt Experimentelle Hypothesenüberprüfung (Eingeschränkt, Gegeben)) )
“No, for that I’d use Perl or Python"
Um SeqAn zu erlernen, versucht der Anwender bewusst den konzeptionellen Unterbau zu verstehen.
Besonders bei erfahreren Anwendern unternommen.
Notiz:
In CD nicht kodiert, da zu spät entdeckt.
Wenn ein Problem / Fragestellung ungeklärt bleibt, liest der Anwender nicht-oberflächlich in der Doku.
Im Unterschied dazu gibt es nicht das Opportunistisch e Herumprobieren.
In Kombination mit d3b2 - workStyle
“viel in die Dokumentation geschaut"
Befragter spricht von “Funktionalität"
Die Bedeutung war mir erst unklar.
Der Befragte 60ba - progressiveEvaluation hat mr Klarheit verschafft. Dieser spricht davon, wie man eine Funktion genau anwendet. Das ist hier sehr wahrscheinlich auch gemeint gewesen.
Transkription:
Wenn es zu wenig Beispiele gibt oder ich nicht den Gebrauch einer Funktion verstehe, komme ich ins schleudern.
“ergründen"
+ Anwender = systematisch
wurde erfragt
Ein Phase / Aktivität, die dazu verwendet wird, existierenden SeqAn-Code (wahrscheinlich SeqAn-Tutorial-Code) nachzuvollziehen.
~ beschreibt das Ziel, SeqAn innerhalb der angebotenen Workshops zu erlernen.
1 Woche Erfahrung
Anfänger
Workshop-Besucher
~ als Strategie der Fehler-/Defektdiagnose, d.h. die letzte Änderungen werden schrittweise eroiert bis kein Versagen mehr auftritt.
Die Fehlersuche wird im Falle von Compiler-Fehlermeldungen wird anhand der “line of code”-Angabe der Fehlermeldung gemacht. Kuchenbecker: only used information is the line of...
Wird als besonders nervig empfunden, wenn “error is in some SeqAn file” oder “it’s kind of annoying that it doesn’t even tell you the line" “it’s kind of annoying that it doesn't even tell y... also eine assertion verletzt wurde. Dann fehlt die Zeile bzw. die Anwender übersehen diese Angabe. (Dann muss der Debugger ran)
Fehleranfälligkeit klar: Die letzte Änderung, die das Versagen dann beseitigt hat, wird als der Defekt angenommen und lässt evtl. Rückschluss auf Fehler zu. Beides Rückschlüsse können fehlerhaft sein (z.B. weil eine andere Code-Änderung gemacht hat, die auch zur Beseitigung des Versagens geführt hat)
Strategien zur Anwendungs von Library-Bestandteilen
~ tritt ein, wenn Verständnis aktiv vermieden wird oder nur sehr schwer zu erbringen ist.
~ wird von Anwendern entwickelt, wenn Sie Natur von Metafunktionen nicht begriffen haben
Die besteht darin, ::Type anzufügen oder zu entfernen, bis der Code kompiliert.
Von Anwendern nicht weiter erklärt.
Anwender gehen mit fehlenden (oder unzureichenden?) Beispielen wie folgt um:
Sie wünschen sich entweder eine geringere Work-Step Unit um den Funktionsablauf / -weise besser zu verstehen
und/oder eine gut dokumentierte Rückgabe. Mit diesen Informationen könnten Sie besser das fehlende Anwendungsbeispiel rekonstruieren.
Unzureichende Kenntnisse bezogen auf SeqAn aber besonders auf C++/TP (vgl. Unbekannte Konstrukte / LET) werden nicht systematisch abgestellt (zum Beispiel durch Selbststudium), sondern kompensiert.
Möglichkeiten d. Kompensation: siehe Untercodes
Anwender schließt mit Rückgabewert auf die Funktionsweise der Funktion (hier: Bewegt sich der Iterator oder wird einer erzeugt)
“z.B. nicht weiß, ob der Iterator bewegt wird oder ein neuer erzeugt, usw."
Anwender erlernen den Gebrauch von SeqAn anhand von Beispielen.
Relevante Lektüre: "Program Comprehension Modelle" in Diss
Wird interessanterweise nur bei systematisch / pragramtisch lernenden Anwendern beobachtet!
Befragter spricht von “Funktionalität"
Die Bedeutung war mir erst unklar.
Der Befragte 60ba - progressiveEvaluation hat mr Klarheit verschafft. Dieser spricht davon, wie man eine Funktion genau anwendet. Das ist hier sehr wahrscheinlich auch gemeint gewesen.
Transkription:
Wenn es zu wenig Beispiele gibt oder ich nicht den Gebrauch einer Funktion verstehe, komme ich ins schleudern.
“wenig Beispiele"
cite{Lange:1989jr}: Ein erfahrener Entwickler hatte eine existierende Softwarebibliothek, die verschiedene wiederverwendbare Komponenten bereitstellt, um neue Komponenten erweitert. Um dies zu tun, kopierte er häufig eine ähnliche Komponente und passte diese an.
cite{Rosson:1996da,Stylos:2008jt} machten ähnliche Beobachtungen. Dabei wurde konkret ganze Klassen kopiert und so lange angepasst, bis die angepasste Klasse ihren neuen Zweck erfüllte.
cite{Rosson:1996da} beschreibt die Wiederverwendungsform reuse of uses, al- so das Wiederverwenden von Anwendungen. Die Autoren machte die Beobach- tung, wie API-(End-)Anwender vor der Frage standen, wie ein bestimmtes API- Konstrukt (Datenstruktur, Funktion, etc.) denn nun genutzt wird. Dazu suchten manche Anwender nach einem ähnlichen Anwendungskontext (z.B. in Form von Codebeispielen), die dann häufig als verbindliche Vorlage kopiert und angepasst wurden.
Diese Strategie wird von cite{Fairbanks:2006jw} kritisch gesehen. Sie nennen drei Schwierigkeiten:
Das Auffinden solcher konkreten Anwendungsfälle ist schwierig und zeitauf- wändig.
Die Bestimmung relevanter Teile ist fehleranfällig.
Die Bewahrung der Intention wird sogar als unmöglich (“impossible”) beschrieben.
Generelle, sehr gute Beschreibung
Ko, A. J., & Myers, B. A. (2005). Human factors affecting dependability in end-user programming. ACM SIGSOFT Software Engineering Notes (Vol. 30, pp. 14). ACM. doi:10.1145/1082983.1083245
Sehr gutes Beispiel
Lange, B. M., & Moher, T. G. (1989). Some strategies of reuse in an object-oriented programming environment. ACM SIGCHI Bulletin (Vol. 20, pp. 6973). ACM. doi:10.1145/67450.67465
~ wird von Anwendern entwickelt, wenn Sie Natur von Metafunktionen nicht begriffen haben
Die besteht darin, ::Type anzufügen oder zu entfernen, bis der Code kompiliert.
Weil Anwendern das Setzen von Template Parametern zu schwierig ist (Fehleranfälliges Setzen von Template-Parametern ), kopieren sie einfach Code-Stücke, ohne sie zu verstehen. siehe 3ff7 - roleExpressiveness (grounding Blindes Kopieren, ohne zu verstehen)
"I have little understanding why in a particular place a particular form or variant or an idiom is used in place of another one” 7c79 - roleExpressiveness
Aus dem letzten Satz geht nicht hervor, ob die Code bei Metafunktionen allgemein oder nur bei uneindeutigen Funktionssignaturen verwendet.
Dem Anwender unbekannte LET / Konstrukte führen zu Verständnis- u. folglich zu Anwendungsschwierigkeiten.
Ist wie bei 60ba - hardMentalOperations der Interaktionsgrad mit anderen “Konzepten" / “Konstrukten” zu stark, erschwert dies die Programmentwicklung (Unmöglich, Langsam, Schnell) .
Beispiel: Metafunktionen
Vielleicht sogar nur Template Programming Konstrukte, die Probleme bereiten. Dafür spricht auch 7c79 - roleExpressiveness "form or variant or an idiom is used in place of another one”, wo sehr wahrscheinlichvon Templates die Rede ist
“I end up copying code snippets from other apps without understanding why they work and why what I initially wrote doesn’t."
“most of the time I copy code snippets that seem to do what I need. I have little understanding why in a particular place a particular form or variant or an idiom is used in place of another one."
Wie leicht kann man SeqAn erlernen?
Versprechen, SeqAn sei leicht zu erlernen, wird enttäuscht.
Flach: Das Erlernen von SeqAn braucht Zeit und Übung.
Wird von aba9 - learningStyle sogar mit “ Disziplin " beschrieben.
Immer wieder wird von notwendiger Praxis ( Übung ) erzählt.
c547 - learningStyle sagt “once you get through it"
“needs practice"
“wenn man weiss wie"
passt nicht ganz
Triviale Aussage; Paraphrase: Mir fällt das Bearbeiten von Datenstrukturen schwierig, die ich nur wenig kenne.
“viel in die Dokumentation geschaut”, daher “mittel”
Dem Anwender unbekannte LET / Konstrukte führen zu Verständnis- u. folglich zu Anwendungsschwierigkeiten.
Ist wie bei 60ba - hardMentalOperations der Interaktionsgrad mit anderen “Konzepten" / “Konstrukten” zu stark, erschwert dies die Programmentwicklung (Unmöglich, Langsam, Schnell) .
Beispiel: Metafunktionen
Vielleicht sogar nur Template Programming Konstrukte, die Probleme bereiten. Dafür spricht auch 7c79 - roleExpressiveness "form or variant or an idiom is used in place of another one”, wo sehr wahrscheinlichvon Templates die Rede ist
"without understanding why they work and why what I initially wrote doesn’t"
Die in den SeqAn-Tutorials aufgeführten Assignments, http://trac.seqan.de/wiki/Tutorial (“Assignments” namentlich genannt von aba9) helfen den Anwendern dabei, SeqAn zu erlernen.
Mögliche Ursache
Lösungen werden immer vollständig und damit kompilirbar angegeben.
ABER:
Das heißt nicht, dass sie reichen! Insbesondere 3ff7 - learningStyle hat große Probleme, SeqAn zum Laufen zu bringen (Programmentwicklung (Unmöglich, Langsam, Schnell)), obwohl er die Lernresourcen für hilfreich hält.
Die Bearbeitung der Tutorials wird als hilfreich als auch mühsam beschrieben.
Mögliche Ursache:
Die Tutorials sind sehr lang und enthalten viel Prosa.
Zumindest optisch sind de Tutorials sehr text-lastig und enthalten wenig Bebilderung.
Beispiel:
“tutorials […] are really helpful"
Nicht hilfreich, weil sofort eine Einschänkung folgt und “zum größten Teil” als Gefälligkeitsformulierung (soziale Erwünschtheit) verwendet wird.
S4 = Advanced OOP system in R
BWT = http://en.wikipedia.org/wiki/Burrows–Wheeler_transform
“ad 2. tutorials."
"However, while I found the tutorials easy to follow and to complete, I found it very hard to start my own work."
“I [had] a very good time writing simple apps. But when I tried something more complex, I immediately run into a wall."
"it is easy at the beginning, but is becomes rapidly much harder when the problems complexity arises."
Die Assignments (in den Tutorials) werden als hilfreich zum Erlernen von SeqAn beschrieben.
Def: Anwender konsultiert SeqAn-Lernresourcen (Doku, Tutorials, etc.)
Nur statistische Zahlen: 9 Befragte
Bei jeweils 4 Teilnehmer entfällt mehr als 50% bzw. 80% der Zeit auf das Verstehen und Explorieren von SeqAn.
Durchschnittlich 75% um genau zu sein. Allerdings darf man nicht vergessen, dass es sich um einen Workshop handelt.
Dem Anwender unbekannte LET / Konstrukte führen zu Verständnis- u. folglich zu Anwendungsschwierigkeiten.
Ist wie bei 60ba - hardMentalOperations der Interaktionsgrad mit anderen “Konzepten" / “Konstrukten” zu stark, erschwert dies die Programmentwicklung (Unmöglich, Langsam, Schnell) .
Beispiel: Metafunktionen
Vielleicht sogar nur Template Programming Konstrukte, die Probleme bereiten. Dafür spricht auch 7c79 - roleExpressiveness "form or variant or an idiom is used in place of another one”, wo sehr wahrscheinlichvon Templates die Rede ist
“requires lot of reading of the documentation"
Wie schnell kommt man als Anfänger in SeqAn rein.
Erste Entwicklungsversuche.
nicht klar, ob “schwer danach” oder nicht “schwer darin” gemeint ist.
Daher Suchfunktion (Umständlich) und Auffindbarkeit
Verschiedene Lesarten:
1. Ich muss mich erst an die vorhandene Funktionalität gewöhnen.
2. Ich muss erst verstehen, welchen Funktionen überhaupt bereit stehen.
“tried to implement"
“extremely messy and require a lot of overhead” + Anfänger
S4 = Advanced OOP system in R
BWT = http://en.wikipedia.org/wiki/Burrows–Wheeler_transform
“it was easier for me to understand S4 programming framework in R or how BWT works than to figure out what how to cast a variable to its correct type"
"However, while I found the tutorials easy to follow and to complete, I found it very hard to start my own work."
“I [had] a very good time writing simple apps. But when I tried something more complex, I immediately run into a wall."
Interessanterweise ist zu Beobachtung, dass Probleme, die weitgehend mit Template Programming zu tun haben, von Personen, die bereits lange (aber sporadisch) SeqAn einsetzen, immer noch bestehen!
Selbst 00c6 - understandingPercentageTime gibt noch eine Verständniszeit beim Entwickeln von 30% (70% = Entwicklung) an.
Ewtl. allgemeiner: SeqAn kann im sporadischen Gebrauch nicht erlernt werden
Bei 7c79 - personal noch weitere Facette: nämlich schnelle Anfangserfolge und dann enormer Schwierigkeitsanstieg (bei eigenen Entwicklung im Kontrast zu Tutorials)
TODO: evtl. zur Eigenschaft des (zu erstellenden Codes) Usability-Problem machen
Paraphrase: Unbekannte LET erschweren meine Programmentwicklung
Unbekannt, von welchen “Konzepten” und “Konstrukturen” die Rede ist.
Besonders relevant, da User seit 4 Jahren
Aus dem letzten Satz geht nicht hervor, ob die Code bei Metafunktionen allgemein oder nur bei uneindeutigen Funktionssignaturen verwendet.
wenig Bezug zur Frage; hat sich eher das Herz ausgeschüttet
Durch das eigenartige Design, kann kaum existierendes Wissen wiederverwendet werden.
User Experience Probleme
Der Entwickler mag SeqAn - einfach so.
“people having invested obviously copious amounts of work in writing documentation and tutorials"
“I like SeqAn"
Proxy für Kuchenbecker: "Even if you find the global functio... (grounding Unsicherheit)
Anwender können wenig Verständnis dafür aufbringen, dass SeqAn so komplex und schwierig zu lernen ist.
Motivation (z.B. Benchmark) würde Motivation angeben, SeqAn zu erlernen Kuchenbecker: “not clear why you have to go throug...
"However, while I found the tutorials easy to follow and to complete, I found it very hard to start my own work."
Dem Anwender unbekannte LET / Konstrukte führen zu Verständnis- u. folglich zu Anwendungsschwierigkeiten.
Ist wie bei 60ba - hardMentalOperations der Interaktionsgrad mit anderen “Konzepten" / “Konstrukten” zu stark, erschwert dies die Programmentwicklung (Unmöglich, Langsam, Schnell) .
Beispiel: Metafunktionen
Vielleicht sogar nur Template Programming Konstrukte, die Probleme bereiten. Dafür spricht auch 7c79 - roleExpressiveness "form or variant or an idiom is used in place of another one”, wo sehr wahrscheinlichvon Templates die Rede ist
“extremely un-intuitive"
liegt erst ab folgender Schwelle vor:
Insb. nicht wenn:
Mögliche Ursachen:
Programmentwicklung (Unmöglich, Langsam, Schnell)
Vermutlich enorme Hürde, sich mit SeqAn weiterzubeschäftigen
Zitate:
“For me, this is extremely un-intuitive” 7c79 - roleExpressiveness
“makes me feel stupid”, 7c79 - errorProneness
"Typing. 99% error messages that I have seen until now were due to incorrect types”, 7c79 - errorProneness
Aus dem letzten Satz geht nicht hervor, ob die Code bei Metafunktionen allgemein oder nur bei uneindeutigen Funktionssignaturen verwendet.
"ohne wirklich zu verstehen was sie tun"
"fällt mir oft sehr schwer"
“schafft Verwirrung"
“tried […] but failed"
“99% of the cases […] will not even compile"
“extremely messy and require a lot of overhead"
Stichpunktartige Paraphrase:
- remembering complicated
-- many templates
-- many variants of types
-- many variants of templates
- difference unclear
-- e.g. Dna5 and Dna5String
Frage: Was ist gemeint, wenn hier von Templates gesprochen wird?
Funktions-Templates oder Klassen-Templates?
Sehr wahrscheinlich Klassen-Template, denn Funktions-Templates können meist so wie normale Funktionen aufgerufen werden.
Klassen-Templates werden in SeqAn, wie in http://trac.seqan.de/wiki/Tutorial/Metafunctions erklärt, als Metafunktionen eingesetzt. Also: Es geht nicht um Generic Classes (z.B: String<X>), sondern um Berechnungen, deren Ergebnis meist in ::Type steckt. vgl. auch Template Programming und Metafunktionen .
Die führt zu einer neuen Familie von Funktionen, die dem Anwender schwer fallen.
“and”, “and”, “and” sowie die Frustration die in den anderen Aussagen liegt
Dem Anwender unbekannte LET / Konstrukte führen zu Verständnis- u. folglich zu Anwendungsschwierigkeiten.
Ist wie bei 60ba - hardMentalOperations der Interaktionsgrad mit anderen “Konzepten" / “Konstrukten” zu stark, erschwert dies die Programmentwicklung (Unmöglich, Langsam, Schnell) .
Beispiel: Metafunktionen
Vielleicht sogar nur Template Programming Konstrukte, die Probleme bereiten. Dafür spricht auch 7c79 - roleExpressiveness "form or variant or an idiom is used in place of another one”, wo sehr wahrscheinlichvon Templates die Rede ist
“extremely unintuitive"
“No, for that I’d use Perl or Python or even C. Something that […] doesn’t require me to spend time on gettping type casting right."
“99%”, “SeqAn makes me feel stupid"
Quelle: 7c79 - provisionality
Sobald man was ändert, funktionierts/kompilierts nicht mehr.
Wenn der Code nicht per copy/paste kam, ist er schwer zu entwickeln.
7c79 nennt Typen, Castings, Templates usw. als Ursache.
End User sind häufig opportunistisch und versuchen nur, Code zum Laufen zu bekommen - ohne Hintergründe zu verstehen
Ko and Myers 2003; Beckwith et al. 2005a
Quelle: 7c79 - provisionality
“tried to implement (and failed) made me go through tons of documentations before I even finished the basic [tutorials]"
Der Gesamtheit der Aussagen zu entnehmen.
S4 = Advanced OOP system in R
BWT = http://en.wikipedia.org/wiki/Burrows–Wheeler_transform
“it was easier for me to understand S4 programming framework in R or how BWT works than to figure out what how to cast a variable to its correct type"
Die Programmentwicklung wird beschleunigt (erleichtert),
weil SeqAn’s (globale) Funktionen generisch programmiert sind
und verschiedenartige Typen akzeptieren.
Interpretation:
Bei Änderungen bleibt das Programmskelett bleibt stabil.
Ursache: Generezität
im Falle von 60ba - hardMentalOperations wird Entwicklung mindestens verlangsamt. Der Ursache liegt wahrscheinlich in Unbekannte Konstrukte / LET
(ehemals: "Scheitern problem-lösender Programmierung")
(von 7c79 - viscosity als “will not even compile” beschrieben)
Anwender schaffen es einfach nicht, das Programm zum Laufen zu bekommen:
Im Gegensatz zum Abarbeiten von Tutorials / Assignments stößt 7c79 - prematureCommitment innerhalb kürzester Zeit auf Probleme, muss “Tonnen von Dokumentation” bewältigen und scheitert dennoch.
Mögliche Folgen:
Letondal, C. (2006). Participatory Programming: Developing Programmable Bioinformatics Tools for End-Users. In End User Development (Vol. 9, pp. 207�242). Dordrecht: Springer Netherlands. doi:10.1007/1-4020-5386-X_10
beschreibt, wie Entwickler an einfachsten Aufgaben scheitern, die nicht direkt explizit und einfach angeboten werden
Einziger Ausweg: Blindes Kopieren, ohne zu verstehen
“connecting my old code with SeqAn […] failed"
“start my own work"
Paraphrase: Unbekannte LET erschweren meine Programmentwicklung
Unbekannt, von welchen “Konzepten” und “Konstrukturen” die Rede ist.
“Am Anfang braucht man natürlich deutlich mehr [Codezeilen]."
"Es braucht sicher etwas Übung."
Anwender schließt mit Rückgabewert auf die Funktionsweise der Funktion (hier: Bewegt sich der Iterator oder wird einer erzeugt)
“Was eine Funktion tut, erkennt man nur schwer, weil man nicht sieht, wozu sie gehören. Davon hängt ab, was sie tun."
"Teilweise fällt mir das ehr schwer"
Befragter spricht von “Funktionalität"
Die Bedeutung war mir erst unklar.
Der Befragte 60ba - progressiveEvaluation hat mr Klarheit verschafft. Dieser spricht davon, wie man eine Funktion genau anwendet. Das ist hier sehr wahrscheinlich auch gemeint gewesen.
Transkription:
Wenn es zu wenig Beispiele gibt oder ich nicht den Gebrauch einer Funktion verstehe, komme ich ins schleudern.
CD-Frage: “Are there particular changes that are more difficult or especially difficult to make? Which ones?"
wenig Bezug zur Frage; hat sich eher das Herz ausgeschüttet
Stichpunktartige Paraphrase:
- remembering complicated
-- many templates
-- many variants of types
-- many variants of templates
- difference unclear
-- e.g. Dna5 and Dna5String
Frage: Was ist gemeint, wenn hier von Templates gesprochen wird?
Funktions-Templates oder Klassen-Templates?
Sehr wahrscheinlich Klassen-Template, denn Funktions-Templates können meist so wie normale Funktionen aufgerufen werden.
Klassen-Templates werden in SeqAn, wie in http://trac.seqan.de/wiki/Tutorial/Metafunctions erklärt, als Metafunktionen eingesetzt. Also: Es geht nicht um Generic Classes (z.B: String<X>), sondern um Berechnungen, deren Ergebnis meist in ::Type steckt. vgl. auch Template Programming und Metafunktionen .
Die führt zu einer neuen Familie von Funktionen, die dem Anwender schwer fallen.
Von Originalfrage: “Do some things seem escpecially complex or difficult […]?” + Aussage
An Schilderung herauslesbar
“[…] for that I’d use […] something that doesn’t require me to spend time on getting type casting right."
S4 = Advanced OOP system in R
BWT = http://en.wikipedia.org/wiki/Burrows–Wheeler_transform
siehe andere Antworten / Kontext
Sobald man was ändert, funktionierts/kompilierts nicht mehr.
Wenn der Code nicht per copy/paste kam, ist er schwer zu entwickeln.
(End User sind häufig opportunistisch und versuchen nur, Code zum Laufen zu bekommen - ohne Hintergründe zu verstehen; siehe bibtext://Ko:2011el The State of the Art in End-User Software Engineering (Ko and Myers 2003, Beckwith et al. 2005a))
“Refactoring"
Statt etwas in SeqAn zu schreiben, weicht ein Anwender auf eine andere Sprache / Framework aus.
" No, for that I’d use Perl or Python or even C."
Anfänger beschreiben, dass Sie anfänglich nicht wissen, welche Funktionen ans Ziel führen / helfen?
Mögliche Ursachen: Vocabulary Problem , Online-Dokumentation (Verbessert, Confusing) , (auch: Starter Object )
Ist immer mit viel Zeitaufwand verbunden!!!
Stand:
Fehlende Funktionskategorisierung ist Ursache für Probleme bei der Identifikation relevanter Funktionen
Behebung vom Identifikationsproblem:
Neben einer Funktionskategorisierung kann das auch eine sehr gute Suchfunktion sein.
Diese Information liegt vor, sie wird in der technischen Implementierung aber nicht abgebildet, sondern nur in der Doku.
in the documentation there is this kind of informa... (z.B. String.length)
Grund: Erweiterbarkeit
Das global interface mit seinen global interface functions ist eine SeqAn zugrunde liegende Design-Entscheidung, welches technisch durch den Einsatz von Templatemetaprogrammierung realisiert wird.
Die Grundidee ist, dass es generisch benannte globale Funktionen gibt, die für bestimmte Eingaben spezialisiert werden können.
Funktionen können:
Die generischen Funktionen in SeqAn verändern ihr Verhalten also in Abhängigkeit ihrer Parameter.
Auch kann sich dabei der Rückgabewert ändern (was in C++ nicht unüblich ist):
Den Funktionen fehlt der Kontext / das starter/primary object, wie dies in den meisten OOP-Sprachen technisch erzwungen wird. In SeqAn existiert die Zugehörigkeit nur inhaltlich und muss der Dokumentation entnommen werden.
In seiner aktuellen Form führt das global interface zu Inkonsistenzen bzgl. STL.
Es gibt nicht nur das Start Object Problem, es kann auch sein, dass das Verb (also die Funktion) im Mittelpunkt steht.
Dann wäre der Gebrauch von globalen Funktion förderlich.
Abhängig vom Background des Anwenders, kann es aber auch sein, dass der Funktionsname und nicht das Object im Mittelpunkt steht. Also als erste Frage nicht womit ich etwas mache, sondern was -> verb(object) statt object.verb()
Ähnliche Typen wie String, StringSet und array (z.B. SuffixArray) können nicht unterschieden werden.
Ursache: Fehlendes Benennungschema (bereits kodiert)
Im Unterschied zur Ununterscheidbarkeit von LET geht es hier um die gleiche LET.
Bei d3b2 - hardMentalOperations scheint es um Container zu gehen.
“I just don’t see the difference between StringSet and String of Strings”, Alien: "I just don't see the difference between St...
Gleiche Person:
- “I opened the documentation [and] just didn’t get the usage of StringSet. What you could do with StringSets you could also have done with String of Strings."
Antworten von SeqAn-Entwicklern auch nicht deutlich. Ungefähre Zusammenfassung: An manchen Stellen braucht man sie und an manchen nicht unbedingt.
Aber: Keine Standardempfehlung immer StringSets zu nehmen, denn es gibt auch Ausnahmen. Zumindest wird auf http://seqan.readthedocs.org/en/latest/Tutorial/SimpleRnaSeq.html zur Speicherung von Intervallen ein String<String> verwendet, was bei Kuchenbecker: [The latter] is not even true since ... für Irritationen führt.
String<String<TInterval> > intervals;
Das Verhalten / der Zweck einer Funktion kann nicht erkannt werden.
Warum? Weil die Funktionen nicht kategorisiert sind und somit nicht das primary/starter object erkennbar ist.
Beispiel:
TInfix label(frag, stringSet, seqID);
http://docs.seqan.de/seqan/develop/?p=Fragment#Fragment%23label
TAlphabet label(it);
http://docs.seqan.de/seqan/develop/?p=OutEdgeIterator#OutEdgeIterator%23label
Fehler werden vornehmlich von Anfängern / Workshop-Besuchern gemeldet
Werden verständlicher mit existierendem Fehlendes Benennungschema
Design-Feature von citep{GogolDoring:2009vz} zur besseren Usability
“I don’t like Shortcuts”
“If you read Peptide it makes you think that it’s more than a shortcut.” 7i: If you read Peptide it makes you think that it...
(weitere Zitate siehe Citations)
Stimmungsbild klar: Shortcuts nerven. Shortcuts kann man selber deklarieren. Shortcuts täuschen eine Komplexität vor, die es nicht gibt.
Wenn dann, technisch.
0 Leute für Domänen
Die Design-Entscheidung hat das Ziel, die Performance der auf der Library basierenden Programme zu erhöhen.
Die Design-Entscheidung hat das Ziel, die Usability der auf der Library basierenden Programme zu erhöhen.
Stichpunktartige Paraphrase:
- remembering complicated
-- many templates
-- many variants of types
-- many variants of templates
- difference unclear
-- e.g. Dna5 and Dna5String
Frage: Was ist gemeint, wenn hier von Templates gesprochen wird?
Funktions-Templates oder Klassen-Templates?
Sehr wahrscheinlich Klassen-Template, denn Funktions-Templates können meist so wie normale Funktionen aufgerufen werden.
Klassen-Templates werden in SeqAn, wie in http://trac.seqan.de/wiki/Tutorial/Metafunctions erklärt, als Metafunktionen eingesetzt. Also: Es geht nicht um Generic Classes (z.B: String<X>), sondern um Berechnungen, deren Ergebnis meist in ::Type steckt. vgl. auch Template Programming und Metafunktionen .
Die führt zu einer neuen Familie von Funktionen, die dem Anwender schwer fallen.
Vermutung
Dem Anwender unbekannte LET / Konstrukte führen zu Verständnis- u. folglich zu Anwendungsschwierigkeiten.
Ist wie bei 60ba - hardMentalOperations der Interaktionsgrad mit anderen “Konzepten" / “Konstrukten” zu stark, erschwert dies die Programmentwicklung (Unmöglich, Langsam, Schnell) .
Beispiel: Metafunktionen
Vielleicht sogar nur Template Programming Konstrukte, die Probleme bereiten. Dafür spricht auch 7c79 - roleExpressiveness "form or variant or an idiom is used in place of another one”, wo sehr wahrscheinlichvon Templates die Rede ist
“this is extremely un-intuitive” + Gesamteindruck (Unverständnis über Komplexität)
ergibt sich nur indirekt (also: Zum Kennenlernen wird erst einmal ein “kleines Tool” entwickelt)
Stichpunktartige Paraphrase:
- remembering complicated
-- many templates
-- many variants of types
-- many variants of templates
- difference unclear
-- e.g. Dna5 and Dna5String
Frage: Was ist gemeint, wenn hier von Templates gesprochen wird?
Funktions-Templates oder Klassen-Templates?
Sehr wahrscheinlich Klassen-Template, denn Funktions-Templates können meist so wie normale Funktionen aufgerufen werden.
Klassen-Templates werden in SeqAn, wie in http://trac.seqan.de/wiki/Tutorial/Metafunctions erklärt, als Metafunktionen eingesetzt. Also: Es geht nicht um Generic Classes (z.B: String<X>), sondern um Berechnungen, deren Ergebnis meist in ::Type steckt. vgl. auch Template Programming und Metafunktionen .
Die führt zu einer neuen Familie von Funktionen, die dem Anwender schwer fallen.
wegen Performance
reine Vermutung!
Befragter spricht von “Funktionalität"
Die Bedeutung war mir erst unklar.
Der Befragte 60ba - progressiveEvaluation hat mr Klarheit verschafft. Dieser spricht davon, wie man eine Funktion genau anwendet. Das ist hier sehr wahrscheinlich auch gemeint gewesen.
Transkription:
Wenn es zu wenig Beispiele gibt oder ich nicht den Gebrauch einer Funktion verstehe, komme ich ins schleudern.
wegen Performance und hohem Aufwand, sämtliche Operatoren zu überladen
Sobald man was ändert, funktionierts/kompilierts nicht mehr.
Wenn der Code nicht per copy/paste kam, ist er schwer zu entwickeln.
7c79 nennt Typen, Castings, Templates usw. als Ursache.
End User sind häufig opportunistisch und versuchen nur, Code zum Laufen zu bekommen - ohne Hintergründe zu verstehen
Ko and Myers 2003; Beckwith et al. 2005a
“incorrect types”, in Schilderung enthalten
S4 = Advanced OOP system in R
BWT = http://en.wikipedia.org/wiki/Burrows–Wheeler_transform
“No, for that I’d use Perl or Python or even C. Something that […] doesn’t require me to spend time on gettping type casting right."
Stichpunktartige Paraphrase:
- remembering complicated
-- many templates
-- many variants of types
-- many variants of templates
- difference unclear
-- e.g. Dna5 and Dna5String
Frage: Was ist gemeint, wenn hier von Templates gesprochen wird?
Funktions-Templates oder Klassen-Templates?
Sehr wahrscheinlich Klassen-Template, denn Funktions-Templates können meist so wie normale Funktionen aufgerufen werden.
Klassen-Templates werden in SeqAn, wie in http://trac.seqan.de/wiki/Tutorial/Metafunctions erklärt, als Metafunktionen eingesetzt. Also: Es geht nicht um Generic Classes (z.B: String<X>), sondern um Berechnungen, deren Ergebnis meist in ::Type steckt. vgl. auch Template Programming und Metafunktionen .
Die führt zu einer neuen Familie von Funktionen, die dem Anwender schwer fallen.
“remembering all the"
S4 = Advanced OOP system in R
BWT = http://en.wikipedia.org/wiki/Burrows–Wheeler_transform
Anwender schließt mit Rückgabewert auf die Funktionsweise der Funktion (hier: Bewegt sich der Iterator oder wird einer erzeugt)
nicht klar, ob “schwer danach” oder nicht “schwer darin” gemeint ist.
Daher Suchfunktion (Umständlich) und Auffindbarkeit
Gilt für opportunistische Anwender
S4 = Advanced OOP system in R
BWT = http://en.wikipedia.org/wiki/Burrows–Wheeler_transform
Dem Anwender unbekannte LET / Konstrukte führen zu Verständnis- u. folglich zu Anwendungsschwierigkeiten.
Ist wie bei 60ba - hardMentalOperations der Interaktionsgrad mit anderen “Konzepten" / “Konstrukten” zu stark, erschwert dies die Programmentwicklung (Unmöglich, Langsam, Schnell) .
Beispiel: Metafunktionen
Vielleicht sogar nur Template Programming Konstrukte, die Probleme bereiten. Dafür spricht auch 7c79 - roleExpressiveness "form or variant or an idiom is used in place of another one”, wo sehr wahrscheinlichvon Templates die Rede ist
“requires a lot of reading […] and mostly I end up copying code snippets"
Stichpunktartige Paraphrase:
- remembering complicated
-- many templates
-- many variants of types
-- many variants of templates
- difference unclear
-- e.g. Dna5 and Dna5String
Frage: Was ist gemeint, wenn hier von Templates gesprochen wird?
Funktions-Templates oder Klassen-Templates?
Sehr wahrscheinlich Klassen-Template, denn Funktions-Templates können meist so wie normale Funktionen aufgerufen werden.
Klassen-Templates werden in SeqAn, wie in http://trac.seqan.de/wiki/Tutorial/Metafunctions erklärt, als Metafunktionen eingesetzt. Also: Es geht nicht um Generic Classes (z.B: String<X>), sondern um Berechnungen, deren Ergebnis meist in ::Type steckt. vgl. auch Template Programming und Metafunktionen .
Die führt zu einer neuen Familie von Funktionen, die dem Anwender schwer fallen.
Aus dem letzten Satz geht nicht hervor, ob die Code bei Metafunktionen allgemein oder nur bei uneindeutigen Funktionssignaturen verwendet.
Dem Anwender unbekannte LET / Konstrukte führen zu Verständnis- u. folglich zu Anwendungsschwierigkeiten.
Ist wie bei 60ba - hardMentalOperations der Interaktionsgrad mit anderen “Konzepten" / “Konstrukten” zu stark, erschwert dies die Programmentwicklung (Unmöglich, Langsam, Schnell) .
Beispiel: Metafunktionen
Vielleicht sogar nur Template Programming Konstrukte, die Probleme bereiten. Dafür spricht auch 7c79 - roleExpressiveness "form or variant or an idiom is used in place of another one”, wo sehr wahrscheinlichvon Templates die Rede ist
“requires a lot of reading […] and mostly I end up copying code snippets"
“I’d consider moving to SeqAn for speed."
“templates require a lot of overhead"
Besonders relevant, da User seit 4 Jahren
“As for SeqAn, some things seem to be extremely efficient […] but require a lot of overhead"
Paraphrase: Unbekannte LET erschweren meine Programmentwicklung
Unbekannt, von welchen “Konzepten” und “Konstrukturen” die Rede ist.
Wenn der Anwender Vorkenntnisse in C++ hat und auf SeqAn trifft, wird der Inkonsistenzen zur STL antreffen.
Befragter spricht von “Funktionalität"
Die Bedeutung war mir erst unklar.
Der Befragte 60ba - progressiveEvaluation hat mr Klarheit verschafft. Dieser spricht davon, wie man eine Funktion genau anwendet. Das ist hier sehr wahrscheinlich auch gemeint gewesen.
Transkription:
Wenn es zu wenig Beispiele gibt oder ich nicht den Gebrauch einer Funktion verstehe, komme ich ins schleudern.
Aus dem letzten Satz geht nicht hervor, ob die Code bei Metafunktionen allgemein oder nur bei uneindeutigen Funktionssignaturen verwendet.
nicht eindeutig,ob allgemeinoder nur in bei Uneindeutige Signaturbeschreibung (bei Funktionen)
"Der Einstieg fiel mir eigentlich recht leicht. [denn ich] habe die Assignments gemacht und viel in die Dokumentation geschaut."
Aus dem letzten Satz geht nicht hervor, ob die Code bei Metafunktionen allgemein oder nur bei uneindeutigen Funktionssignaturen verwendet.
Die Verwendung eines Global Interface macht es schwer (oder gar unmöglich?) eine Art zu finden, Funktionen zu Kategorisieren.
Denn:
Die Anwesenheit einer Kategorisierung (durch ein starter object, einer Namenkonvention, etc.) würde
Der Eindruck, dass SeqAn mächtig ist, motiviert, sich dem Lernaufwand auszusetzen.
“No, for that I’d use Perl or Python or even C. Something that […] doesn’t require me to spend time on gettping type casting right."
“Was eine Funktion tut, erkennt man nur schwer, weil man nicht sieht, wozu sie gehören. Davon hängt ab, was sie tun."
S4 = Advanced OOP system in R
BWT = http://en.wikipedia.org/wiki/Burrows–Wheeler_transform
offensichtliche Folge der Template Programming Syntax
S4 = Advanced OOP system in R
BWT = http://en.wikipedia.org/wiki/Burrows–Wheeler_transform
“typing […] seem to be extremely messy and require a lot of overhead"
S4 = Advanced OOP system in R
BWT = http://en.wikipedia.org/wiki/Burrows–Wheeler_transform
logischer Schluss
Stichpunktartige Paraphrase:
- remembering complicated
-- many templates
-- many variants of types
-- many variants of templates
- difference unclear
-- e.g. Dna5 and Dna5String
Frage: Was ist gemeint, wenn hier von Templates gesprochen wird?
Funktions-Templates oder Klassen-Templates?
Sehr wahrscheinlich Klassen-Template, denn Funktions-Templates können meist so wie normale Funktionen aufgerufen werden.
Klassen-Templates werden in SeqAn, wie in http://trac.seqan.de/wiki/Tutorial/Metafunctions erklärt, als Metafunktionen eingesetzt. Also: Es geht nicht um Generic Classes (z.B: String<X>), sondern um Berechnungen, deren Ergebnis meist in ::Type steckt. vgl. auch Template Programming und Metafunktionen .
Die führt zu einer neuen Familie von Funktionen, die dem Anwender schwer fallen.
“trying to figure out"
Besonders relevant, da User seit 4 Jahren
Dem Anwender unbekannte LET / Konstrukte führen zu Verständnis- u. folglich zu Anwendungsschwierigkeiten.
Ist wie bei 60ba - hardMentalOperations der Interaktionsgrad mit anderen “Konzepten" / “Konstrukten” zu stark, erschwert dies die Programmentwicklung (Unmöglich, Langsam, Schnell) .
Beispiel: Metafunktionen
Vielleicht sogar nur Template Programming Konstrukte, die Probleme bereiten. Dafür spricht auch 7c79 - roleExpressiveness "form or variant or an idiom is used in place of another one”, wo sehr wahrscheinlichvon Templates die Rede ist
Gesamteindruck (Äußerungen + Intensivität der Auseinandersetzung mit SeqAn) lässt nicht darauf schließen, dass Verständnis-Probleme schnell gelöst wurden
Stichpunktartige Paraphrase:
- remembering complicated
-- many templates
-- many variants of types
-- many variants of templates
- difference unclear
-- e.g. Dna5 and Dna5String
Frage: Was ist gemeint, wenn hier von Templates gesprochen wird?
Funktions-Templates oder Klassen-Templates?
Sehr wahrscheinlich Klassen-Template, denn Funktions-Templates können meist so wie normale Funktionen aufgerufen werden.
Klassen-Templates werden in SeqAn, wie in http://trac.seqan.de/wiki/Tutorial/Metafunctions erklärt, als Metafunktionen eingesetzt. Also: Es geht nicht um Generic Classes (z.B: String<X>), sondern um Berechnungen, deren Ergebnis meist in ::Type steckt. vgl. auch Template Programming und Metafunktionen .
Die führt zu einer neuen Familie von Funktionen, die dem Anwender schwer fallen.
wenig Bezug zur Frage; hat sich eher das Herz ausgeschüttet
Verschiedene Lesarten:
1. Ich muss mich erst an die vorhandene Funktionalität gewöhnen.
2. Ich muss erst verstehen, welchen Funktionen überhaupt bereit stehen.
S4 = Advanced OOP system in R
BWT = http://en.wikipedia.org/wiki/Burrows–Wheeler_transform
Anwender schließt mit Rückgabewert auf die Funktionsweise der Funktion (hier: Bewegt sich der Iterator oder wird einer erzeugt)
“Was eine Funktion tut, erkennt man nur schwer, weil man nicht sieht, wozu sie gehören. Davon hängt ab, was sie tun."
Stichpunktartige Paraphrase:
- remembering complicated
-- many templates
-- many variants of types
-- many variants of templates
- difference unclear
-- e.g. Dna5 and Dna5String
Frage: Was ist gemeint, wenn hier von Templates gesprochen wird?
Funktions-Templates oder Klassen-Templates?
Sehr wahrscheinlich Klassen-Template, denn Funktions-Templates können meist so wie normale Funktionen aufgerufen werden.
Klassen-Templates werden in SeqAn, wie in http://trac.seqan.de/wiki/Tutorial/Metafunctions erklärt, als Metafunktionen eingesetzt. Also: Es geht nicht um Generic Classes (z.B: String<X>), sondern um Berechnungen, deren Ergebnis meist in ::Type steckt. vgl. auch Template Programming und Metafunktionen .
Die führt zu einer neuen Familie von Funktionen, die dem Anwender schwer fallen.
“extremely messy and require a lot of overhead"
S4 = Advanced OOP system in R
BWT = http://en.wikipedia.org/wiki/Burrows–Wheeler_transform
“No, for that I’d use Perl or Python or even C. Something that […] doesn’t require me to spend time on gettping type casting right."
OOP-Hintergrund
Wird als hilfreich, aber aufwändig beschrieben.
Mehrfach fällt der Begriff “Disziplin", d.h. die Usability-Probleme werden abgeschmälert aber nicht vollständig behoben.
Stichpunktartige Paraphrase:
- remembering complicated
-- many templates
-- many variants of types
-- many variants of templates
- difference unclear
-- e.g. Dna5 and Dna5String
Frage: Was ist gemeint, wenn hier von Templates gesprochen wird?
Funktions-Templates oder Klassen-Templates?
Sehr wahrscheinlich Klassen-Template, denn Funktions-Templates können meist so wie normale Funktionen aufgerufen werden.
Klassen-Templates werden in SeqAn, wie in http://trac.seqan.de/wiki/Tutorial/Metafunctions erklärt, als Metafunktionen eingesetzt. Also: Es geht nicht um Generic Classes (z.B: String<X>), sondern um Berechnungen, deren Ergebnis meist in ::Type steckt. vgl. auch Template Programming und Metafunktionen .
Die führt zu einer neuen Familie von Funktionen, die dem Anwender schwer fallen.
“templates seem to be extremely messy and require a lot of overhead"
Stichpunktartige Paraphrase:
- remembering complicated
-- many templates
-- many variants of types
-- many variants of templates
- difference unclear
-- e.g. Dna5 and Dna5String
Frage: Was ist gemeint, wenn hier von Templates gesprochen wird?
Funktions-Templates oder Klassen-Templates?
Sehr wahrscheinlich Klassen-Template, denn Funktions-Templates können meist so wie normale Funktionen aufgerufen werden.
Klassen-Templates werden in SeqAn, wie in http://trac.seqan.de/wiki/Tutorial/Metafunctions erklärt, als Metafunktionen eingesetzt. Also: Es geht nicht um Generic Classes (z.B: String<X>), sondern um Berechnungen, deren Ergebnis meist in ::Type steckt. vgl. auch Template Programming und Metafunktionen .
Die führt zu einer neuen Familie von Funktionen, die dem Anwender schwer fallen.
S4 = Advanced OOP system in R
BWT = http://en.wikipedia.org/wiki/Burrows–Wheeler_transform
Befragter spricht von “Funktionalität"
Die Bedeutung war mir erst unklar.
Der Befragte 60ba - progressiveEvaluation hat mr Klarheit verschafft. Dieser spricht davon, wie man eine Funktion genau anwendet. Das ist hier sehr wahrscheinlich auch gemeint gewesen.
Transkription:
Wenn es zu wenig Beispiele gibt oder ich nicht den Gebrauch einer Funktion verstehe, komme ich ins schleudern.
Viele Entwickler verlassen sich auf bestimmte Namensgebung und erraten so den Namen.
Beispiele sind length und substring.
Stichpunktartige Paraphrase:
- remembering complicated
-- many templates
-- many variants of types
-- many variants of templates
- difference unclear
-- e.g. Dna5 and Dna5String
Frage: Was ist gemeint, wenn hier von Templates gesprochen wird?
Funktions-Templates oder Klassen-Templates?
Sehr wahrscheinlich Klassen-Template, denn Funktions-Templates können meist so wie normale Funktionen aufgerufen werden.
Klassen-Templates werden in SeqAn, wie in http://trac.seqan.de/wiki/Tutorial/Metafunctions erklärt, als Metafunktionen eingesetzt. Also: Es geht nicht um Generic Classes (z.B: String<X>), sondern um Berechnungen, deren Ergebnis meist in ::Type steckt. vgl. auch Template Programming und Metafunktionen .
Die führt zu einer neuen Familie von Funktionen, die dem Anwender schwer fallen.
“trying to figure out"
Stichpunktartige Paraphrase:
- remembering complicated
-- many templates
-- many variants of types
-- many variants of templates
- difference unclear
-- e.g. Dna5 and Dna5String
Frage: Was ist gemeint, wenn hier von Templates gesprochen wird?
Funktions-Templates oder Klassen-Templates?
Sehr wahrscheinlich Klassen-Template, denn Funktions-Templates können meist so wie normale Funktionen aufgerufen werden.
Klassen-Templates werden in SeqAn, wie in http://trac.seqan.de/wiki/Tutorial/Metafunctions erklärt, als Metafunktionen eingesetzt. Also: Es geht nicht um Generic Classes (z.B: String<X>), sondern um Berechnungen, deren Ergebnis meist in ::Type steckt. vgl. auch Template Programming und Metafunktionen .
Die führt zu einer neuen Familie von Funktionen, die dem Anwender schwer fallen.
“trying to figure out"
Informationen wie Bedeutung von LET existiert nur logisch aber nicht technisch.
Alles mit — wenn das überhaupt getan wird — in der Dokumentation nachgelesen werden.
Die jetztige Form der global interface führt dazu, dass Funktionen, die in der STL als Member-Funktionen realisiert wurden, in SeqAn global sind.
Das stellt einen Inkostenz dar.
“etwas zu wenig, da […] es mir dadurch schwer fällt nachzuvollziehen was hier genau passiert"
“using incorrect type”, “calling incorrect variant of a function"
Stichpunktartige Paraphrase:
- remembering complicated
-- many templates
-- many variants of types
-- many variants of templates
- difference unclear
-- e.g. Dna5 and Dna5String
Frage: Was ist gemeint, wenn hier von Templates gesprochen wird?
Funktions-Templates oder Klassen-Templates?
Sehr wahrscheinlich Klassen-Template, denn Funktions-Templates können meist so wie normale Funktionen aufgerufen werden.
Klassen-Templates werden in SeqAn, wie in http://trac.seqan.de/wiki/Tutorial/Metafunctions erklärt, als Metafunktionen eingesetzt. Also: Es geht nicht um Generic Classes (z.B: String<X>), sondern um Berechnungen, deren Ergebnis meist in ::Type steckt. vgl. auch Template Programming und Metafunktionen .
Die führt zu einer neuen Familie von Funktionen, die dem Anwender schwer fallen.
Anwender schließt mit Rückgabewert auf die Funktionsweise der Funktion (hier: Bewegt sich der Iterator oder wird einer erzeugt)
Dem Anwender unbekannte LET / Konstrukte führen zu Verständnis- u. folglich zu Anwendungsschwierigkeiten.
Ist wie bei 60ba - hardMentalOperations der Interaktionsgrad mit anderen “Konzepten" / “Konstrukten” zu stark, erschwert dies die Programmentwicklung (Unmöglich, Langsam, Schnell) .
Beispiel: Metafunktionen
Vielleicht sogar nur Template Programming Konstrukte, die Probleme bereiten. Dafür spricht auch 7c79 - roleExpressiveness "form or variant or an idiom is used in place of another one”, wo sehr wahrscheinlichvon Templates die Rede ist
“most of the time I copy code snippets that seem to do what I need. I have little understanding why in a particular place a particular form or variant or an idiom is used in place of another one."
Stichpunktartige Paraphrase:
- remembering complicated
-- many templates
-- many variants of types
-- many variants of templates
- difference unclear
-- e.g. Dna5 and Dna5String
Frage: Was ist gemeint, wenn hier von Templates gesprochen wird?
Funktions-Templates oder Klassen-Templates?
Sehr wahrscheinlich Klassen-Template, denn Funktions-Templates können meist so wie normale Funktionen aufgerufen werden.
Klassen-Templates werden in SeqAn, wie in http://trac.seqan.de/wiki/Tutorial/Metafunctions erklärt, als Metafunktionen eingesetzt. Also: Es geht nicht um Generic Classes (z.B: String<X>), sondern um Berechnungen, deren Ergebnis meist in ::Type steckt. vgl. auch Template Programming und Metafunktionen .
Die führt zu einer neuen Familie von Funktionen, die dem Anwender schwer fallen.
Anwender schließt mit Rückgabewert auf die Funktionsweise der Funktion (hier: Bewegt sich der Iterator oder wird einer erzeugt)
"However, while I found the tutorials easy to follow and to complete, I found it very hard to start my own work."
“I [had] a very good time writing simple apps. But when I tried something more complex, I immediately run into a wall."
S4 = Advanced OOP system in R
BWT = http://en.wikipedia.org/wiki/Burrows–Wheeler_transform
“SeqAn makes me feel stupid”, “calling incorrect variant of a function"
nicht klar, ob “schwer danach” oder nicht “schwer darin” gemeint ist.
Daher Suchfunktion (Umständlich) und Auffindbarkeit
"As for SeqAn, some things seem to be extremely efficient" + Gesamteindruck
Macht in vielen Fällen als Erklärung für beobachtete Probleme im Umgang mit Shortcuts Sinn, denn der Shortcut hätte erkannt werden können (durch Kenntnis des Names oder des Konzepts - siehe Unbekannte Konstrukte / LET).
Befragter spricht von “Funktionalität"
Die Bedeutung war mir erst unklar.
Der Befragte 60ba - progressiveEvaluation hat mr Klarheit verschafft. Dieser spricht davon, wie man eine Funktion genau anwendet. Das ist hier sehr wahrscheinlich auch gemeint gewesen.
Transkription:
Wenn es zu wenig Beispiele gibt oder ich nicht den Gebrauch einer Funktion verstehe, komme ich ins schleudern.
"However, while I found the tutorials easy to follow and to complete, I found it very hard to start my own work."
S4 = Advanced OOP system in R
BWT = http://en.wikipedia.org/wiki/Burrows–Wheeler_transform
OOP-Hintergrund
Dem Anwender unbekannte LET / Konstrukte führen zu Verständnis- u. folglich zu Anwendungsschwierigkeiten.
Ist wie bei 60ba - hardMentalOperations der Interaktionsgrad mit anderen “Konzepten" / “Konstrukten” zu stark, erschwert dies die Programmentwicklung (Unmöglich, Langsam, Schnell) .
Beispiel: Metafunktionen
Vielleicht sogar nur Template Programming Konstrukte, die Probleme bereiten. Dafür spricht auch 7c79 - roleExpressiveness "form or variant or an idiom is used in place of another one”, wo sehr wahrscheinlichvon Templates die Rede ist
“this is extremely un-intuitive […] and I mostly end up copying code snippets"
Aus dem letzten Satz geht nicht hervor, ob die Code bei Metafunktionen allgemein oder nur bei uneindeutigen Funktionssignaturen verwendet.
OOP-Anwender (insb. Java-Anwender) sind an den Komfort des hohen IDE-Supports gewöhnt, was Auswirkungen auf die Programmier- und Lernweise hat.
Anwender mit einem C++-Hintergrund / Inkonsistenzen zur STL feststellen, haben einen unnötig schweren Einsteig, denn Sie müssen die Gebrauch erlernter Konzepte (STL) erneut lernen (SeqAn).
Damit ist der Zwang zur Kommandozeile gemeint.
Wenn man nicht erkennt, welchem primary/starter object eine Funktion zugehörig ist, kann man bei einem konkreten Anwendungsfall nicht ohne weiteres sagen, was die Funktion hier tut.
“Was eine Funktion tut, erkennt man nur schwer, weil man nicht sieht, wozu sie gehören. Davon hängt ab, was sie tun."
Weil die Funktionszugehörigkeit “nicht so ganz ersichtlich” (aba9 - roleExpressiveness) ist, kann man sich nicht erklären, was die Funktion hier genau tut.
"No, for that I'd use Perl or Python or even C. Something that is not necessarily fast, but doesn't require me to spend time on getting type casting right."
Stichpunktartige Paraphrase:
- remembering complicated
-- many templates
-- many variants of types
-- many variants of templates
- difference unclear
-- e.g. Dna5 and Dna5String
Frage: Was ist gemeint, wenn hier von Templates gesprochen wird?
Funktions-Templates oder Klassen-Templates?
Sehr wahrscheinlich Klassen-Template, denn Funktions-Templates können meist so wie normale Funktionen aufgerufen werden.
Klassen-Templates werden in SeqAn, wie in http://trac.seqan.de/wiki/Tutorial/Metafunctions erklärt, als Metafunktionen eingesetzt. Also: Es geht nicht um Generic Classes (z.B: String<X>), sondern um Berechnungen, deren Ergebnis meist in ::Type steckt. vgl. auch Template Programming und Metafunktionen .
Die führt zu einer neuen Familie von Funktionen, die dem Anwender schwer fallen.
“trying to figure out"
Stichpunktartige Paraphrase:
- remembering complicated
-- many templates
-- many variants of types
-- many variants of templates
- difference unclear
-- e.g. Dna5 and Dna5String
Frage: Was ist gemeint, wenn hier von Templates gesprochen wird?
Funktions-Templates oder Klassen-Templates?
Sehr wahrscheinlich Klassen-Template, denn Funktions-Templates können meist so wie normale Funktionen aufgerufen werden.
Klassen-Templates werden in SeqAn, wie in http://trac.seqan.de/wiki/Tutorial/Metafunctions erklärt, als Metafunktionen eingesetzt. Also: Es geht nicht um Generic Classes (z.B: String<X>), sondern um Berechnungen, deren Ergebnis meist in ::Type steckt. vgl. auch Template Programming und Metafunktionen .
Die führt zu einer neuen Familie von Funktionen, die dem Anwender schwer fallen.
“remembering all the"
“SeqAn makes me feel stupid”, “incorrect type"
“extremely messing and require a lot of overhead"
“No, for that I’d use Perl or Python or even C. Something that […] doesn’t require me to spend time on gettping type casting right."
Verschiedene Lesarten:
1. Ich muss mich erst an die vorhandene Funktionalität gewöhnen.
2. Ich muss erst verstehen, welchen Funktionen überhaupt bereit stehen.
“I’d consider moving to SeqAn for speed."
OOP-Hintergrund
Stichpunktartige Paraphrase:
- remembering complicated
-- many templates
-- many variants of types
-- many variants of templates
- difference unclear
-- e.g. Dna5 and Dna5String
Frage: Was ist gemeint, wenn hier von Templates gesprochen wird?
Funktions-Templates oder Klassen-Templates?
Sehr wahrscheinlich Klassen-Template, denn Funktions-Templates können meist so wie normale Funktionen aufgerufen werden.
Klassen-Templates werden in SeqAn, wie in http://trac.seqan.de/wiki/Tutorial/Metafunctions erklärt, als Metafunktionen eingesetzt. Also: Es geht nicht um Generic Classes (z.B: String<X>), sondern um Berechnungen, deren Ergebnis meist in ::Type steckt. vgl. auch Template Programming und Metafunktionen .
Die führt zu einer neuen Familie von Funktionen, die dem Anwender schwer fallen.
Befragter spricht von “Funktionalität"
Die Bedeutung war mir erst unklar.
Der Befragte 60ba - progressiveEvaluation hat mr Klarheit verschafft. Dieser spricht davon, wie man eine Funktion genau anwendet. Das ist hier sehr wahrscheinlich auch gemeint gewesen.
Transkription:
Wenn es zu wenig Beispiele gibt oder ich nicht den Gebrauch einer Funktion verstehe, komme ich ins schleudern.
“using incorrect type”, “calling incorrect variant of a function"
wenig Bezug zur Frage; hat sich eher das Herz ausgeschüttet
Besonders relevant, da User seit 4 Jahren
OOP-Hintergrund